summaryrefslogtreecommitdiff
path: root/tools/aubdump.c
diff options
context:
space:
mode:
authorJason Ekstrand <jason.ekstrand@intel.com>2017-08-23 10:05:27 -0700
committerJason Ekstrand <jason.ekstrand@intel.com>2017-08-24 15:46:17 -0700
commit66cc8cf2bee6232c040a52ea056074d8dd27ab88 (patch)
tree44e2d5709fae8fd7ec82a1089e0d7f248d44147a /tools/aubdump.c
parent37641a5032b2cb2dcdb04a28d3ac3cebd01b8363 (diff)
aubdump: Reject execbuffer2 calls with bad BOs
This is required for the supports_48b_addresses check in the Vulkan driver to work without messing up the resulting aub. Reviewed-by: Scott D Phillips <scott.d.phillips@intel.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Diffstat (limited to 'tools/aubdump.c')
-rw-r--r--tools/aubdump.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/tools/aubdump.c b/tools/aubdump.c
index 610526cc..c14c9fa8 100644
--- a/tools/aubdump.c
+++ b/tools/aubdump.c
@@ -426,6 +426,12 @@ dump_execbuffer2(int fd, struct drm_i915_gem_execbuffer2 *execbuffer2)
obj = &exec_objects[i];
bo = get_bo(obj->handle);
+ /* If bo->size == 0, this means they passed us an invalid
+ * buffer. The kernel will reject it and so should we.
+ */
+ if (bo->size == 0)
+ return;
+
if (obj->flags & EXEC_OBJECT_PINNED) {
bo->offset = obj->offset;
} else {
@@ -475,6 +481,7 @@ add_new_bo(int handle, uint64_t size, void *map)
struct bo *bo = &bos[handle];
fail_if(handle >= MAX_BO_COUNT, "intel_aubdump: bo handle out of range\n");
+ fail_if(size == 0, "intel_aubdump: bo size is invalid\n");
bo->size = size;
bo->map = map;
@@ -487,6 +494,7 @@ remove_bo(int handle)
if (bo->map && !IS_USERPTR(bo->map))
munmap(bo->map, bo->size);
+ bo->size = 0;
bo->map = NULL;
}