]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm: Prevent sign extension on hdisplay and vdisplay
authorJonathan Cavitt <jonathan.cavitt@intel.com>
Tue, 7 Oct 2025 15:36:46 +0000 (15:36 +0000)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Thu, 9 Oct 2025 14:42:30 +0000 (10:42 -0400)
Some functions in drm multiply hdisplay and vdisplay with a third
factor, which can result in a sign extension according to static
analysis due to an implicit s32 promotion.  Use a cast to u32 to
prevent this.

Suggested-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Krzystof Karas <krzysztof.karas@intel.com>
Signed-off-by: Jonathan Cavitt <jonathan.cavitt@intel.com>
Cc: Matthew Auld <matthew.auld@intel.com>
Cc: Himal Prasad Ghimiray <himal.prasad.ghimiray@intel.com>
Cc: Matthew Brost <matthew.brost@intel.com>
Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: Andi Shyti <andi.shyti@intel.com>
Link: https://lore.kernel.org/r/20251007153645.90920-2-jonathan.cavitt@intel.com
Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/drm_gem_vram_helper.c
drivers/gpu/drm/drm_mipi_dbi.c

index 90760d0ca071ebdae3828a064f0e993bc19cf4ac..0bec6f66682b6879798be514e8b189e031220d32 100644 (file)
@@ -967,7 +967,7 @@ drm_vram_helper_mode_valid_internal(struct drm_device *dev,
 
        max_fbpages = (vmm->vram_size / 2) >> PAGE_SHIFT;
 
-       fbsize = mode->hdisplay * mode->vdisplay * max_bpp;
+       fbsize = (u32)mode->hdisplay * mode->vdisplay * max_bpp;
        fbpages = DIV_ROUND_UP(fbsize, PAGE_SIZE);
 
        if (fbpages > max_fbpages)
index e33c78fc8fbd722565306b5d16ba389ad0e68343..b488c91c20a5e6a38ca01b4cfccb14ad4d9737b6 100644 (file)
@@ -691,7 +691,7 @@ int mipi_dbi_dev_init(struct mipi_dbi_dev *dbidev,
                      const struct drm_simple_display_pipe_funcs *funcs,
                      const struct drm_display_mode *mode, unsigned int rotation)
 {
-       size_t bufsize = mode->vdisplay * mode->hdisplay * sizeof(u16);
+       size_t bufsize = (u32)mode->vdisplay * mode->hdisplay * sizeof(u16);
 
        dbidev->drm.mode_config.preferred_depth = 16;