From: Xi Wang Date: Mon, 23 Apr 2012 08:06:42 +0000 (-0400) Subject: drm/i915: fix integer overflow in i915_gem_do_execbuffer() X-Git-Tag: v2.6.39-400.9.0~423^2~21 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=fdfc6779425ad1a62d58737bdb43b55af57b579c;p=users%2Fjedix%2Flinux-maple.git drm/i915: fix integer overflow in i915_gem_do_execbuffer() Orabug: 14107456 This fixes CVE-2012-2384. Commit 44afb3a04391a74309d16180d1e4f8386fdfa745 upstream. On 32-bit systems, a large args->num_cliprects from userspace via ioctl may overflow the allocation size, leading to out-of-bounds access. This vulnerability was introduced in commit 432e58ed ("drm/i915: Avoid allocation for execbuffer object list"). Signed-off-by: Xi Wang Reviewed-by: Chris Wilson Cc: stable@vger.kernel.org Signed-off-by: Daniel Vetter Signed-off-by: Dan Carpenter --- diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c index 00e42b612612..31b6e61e7039 100644 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c @@ -1046,6 +1046,11 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, return -EINVAL; } + if (args->num_cliprects > UINT_MAX / sizeof(*cliprects)) { + DRM_DEBUG("execbuf with %u cliprects\n", + args->num_cliprects); + return -EINVAL; + } cliprects = kmalloc(args->num_cliprects * sizeof(*cliprects), GFP_KERNEL); if (cliprects == NULL) {