• Guenter Roeck's avatar
    drm/nouveau/nvif: Avoid build error due to potential integer overflows · 779aa4d7
    Guenter Roeck authored
    Trying to build parisc:allmodconfig with gcc 12.x or later results
    in the following build error.
    
    drivers/gpu/drm/nouveau/nvif/object.c: In function 'nvif_object_mthd':
    drivers/gpu/drm/nouveau/nvif/object.c:161:9: error:
    	'memcpy' accessing 4294967264 or more bytes at offsets 0 and 32 overlaps 6442450881 bytes at offset -2147483617 [-Werror=restrict]
      161 |         memcpy(data, args->mthd.data, size);
          |         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    drivers/gpu/drm/nouveau/nvif/object.c: In function 'nvif_object_ctor':
    drivers/gpu/drm/nouveau/nvif/object.c:298:17: error:
    	'memcpy' accessing 4294967240 or more bytes at offsets 0 and 56 overlaps 6442450833 bytes at offset -2147483593 [-Werror=restrict]
      298 |                 memcpy(data, args->new.data, size);
    
    gcc assumes that 'sizeof(*args) + size' can overflow, which would result
    in the problem.
    
    The problem is not new, only it is now no longer a warning but an error
    since W=1 has been enabled for the drm subsystem and since Werror is
    enabled for test builds.
    
    Rearrange arithmetic and use check_add_overflow() for validating the
    allocation size to avoid the overflow. While at it, split assignments
    out of if conditions.
    
    Fixes: a61ddb43 ("drm: enable (most) W=1 warnings by default across the subsystem")
    Cc: Javier Martinez Canillas <javierm@redhat.com>
    Cc: Jani Nikula <jani.nikula@intel.com>
    Cc: Thomas Zimmermann <tzimmermann@suse.de>
    Cc: Danilo Krummrich <dakr@redhat.com>
    Cc: Maxime Ripard <mripard@kernel.org>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
    Cc: Joe Perches <joe@perches.com>
    Reviewed-by: default avatarKees Cook <keescook@chromium.org>
    Signed-off-by: default avatarGuenter Roeck <linux@roeck-us.net>
    Signed-off-by: default avatarDanilo Krummrich <dakr@redhat.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20240524134817.1369993-1-linux@roeck-us.net
    779aa4d7
object.c 7.51 KB