drm/i915/gem: Detect overflow in calculating dumb buffer size
authorChris Wilson <chris@chris-wilson.co.uk>
Thu, 23 Jan 2020 12:59:34 +0000 (12:59 +0000)
committerChris Wilson <chris@chris-wilson.co.uk>
Fri, 24 Jan 2020 10:09:56 +0000 (10:09 +0000)
To multiply 2 u32 numbers to generate a u64 in C requires a bit of
forewarning for the compiler.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Ramalingam C <ramalingam.c@intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: stable@vger.kernel.org
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200123125934.1401755-1-chris@chris-wilson.co.uk
drivers/gpu/drm/i915/i915_gem.c

index 0a20083..ff79da5 100644 (file)
@@ -265,7 +265,10 @@ i915_gem_dumb_create(struct drm_file *file,
                                                    DRM_FORMAT_MOD_LINEAR))
                args->pitch = ALIGN(args->pitch, 4096);
 
-       args->size = args->pitch * args->height;
+       if (args->pitch < args->width)
+               return -EINVAL;
+
+       args->size = mul_u32_u32(args->pitch, args->height);
 
        mem_type = INTEL_MEMORY_SYSTEM;
        if (HAS_LMEM(to_i915(dev)))