It is possible to wrap the counter used to allocate the buffer for relocation copies. This could lead to heap writing overflows.
Signed-off-by: Kees Cook <keesc...@chromium.org> Reported-by: Pinkie Pie Cc: sta...@vger.kernel.org --- v2: - move check into validate_exec_list --- drivers/gpu/drm/i915/i915_gem_execbuffer.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c index 752e399..72d7841 100644 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c @@ -732,6 +732,7 @@ validate_exec_list(struct drm_i915_gem_exec_object2 *exec, int count) { int i; + int total = 0; for (i = 0; i < count; i++) { char __user *ptr = (char __user *)(uintptr_t)exec[i].relocs_ptr; @@ -744,6 +745,9 @@ validate_exec_list(struct drm_i915_gem_exec_object2 *exec, if (exec[i].relocation_count > INT_MAX / sizeof(struct drm_i915_gem_relocation_entry)) return -EINVAL; + if (exec[i].relocation_count > INT_MAX - total) + return -ENOMEM; + total += exec[i].relocation_count; length = exec[i].relocation_count * sizeof(struct drm_i915_gem_relocation_entry); -- 1.7.9.5 -- Kees Cook Chrome OS Security _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel