summaryrefslogtreecommitdiff
path: root/intel
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2017-03-08 21:00:59 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2017-03-08 21:03:22 +0000
commit19c4cfc54918d361f2535aec16650e9f0be667cd (patch)
treeb7b54203646ce735728001d4d423a47990ba2440 /intel
parent5ee9cb4b4b6964bcd463b0490f3027e6ccfbf45a (diff)
downloadlibdrm-19c4cfc54918d361f2535aec16650e9f0be667cd.tar.gz
libdrm-19c4cfc54918d361f2535aec16650e9f0be667cd.tar.bz2
libdrm-19c4cfc54918d361f2535aec16650e9f0be667cd.zip
intel: Add handle to hashtable before freeing along an error path
drm_intel_gem_bo_free() unconditionally attempts to remove the handle from the hashtable. This goes horribly wrong if we haven't already added the bo to the hashtable. Reported-by: Michael Thayer <michael.thayer@oracle.com> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'intel')
-rw-r--r--intel/intel_bufmgr_gem.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/intel/intel_bufmgr_gem.c b/intel/intel_bufmgr_gem.c
index b1e69070..e260f2dc 100644
--- a/intel/intel_bufmgr_gem.c
+++ b/intel/intel_bufmgr_gem.c
@@ -815,6 +815,10 @@ retry:
}
bo_gem->gem_handle = create.handle;
+ HASH_ADD(handle_hh, bufmgr_gem->handle_table,
+ gem_handle, sizeof(bo_gem->gem_handle),
+ bo_gem);
+
bo_gem->bo.handle = bo_gem->gem_handle;
bo_gem->bo.bufmgr = bufmgr;
bo_gem->bo.align = alignment;
@@ -827,10 +831,6 @@ retry:
tiling_mode,
stride))
goto err_free;
-
- HASH_ADD(handle_hh, bufmgr_gem->handle_table,
- gem_handle, sizeof(bo_gem->gem_handle),
- bo_gem);
}
bo_gem->name = name;