]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/sysfb: Avoid possible truncation with calculating visible size
authorThomas Zimmermann <tzimmermann@suse.de>
Thu, 18 Jun 2026 08:41:58 +0000 (10:41 +0200)
committerThomas Zimmermann <tzimmermann@suse.de>
Mon, 22 Jun 2026 09:03:21 +0000 (11:03 +0200)
Calculating the visible size of the system framebuffer can result in
truncation of the result. The calculation uses 32-bit arithmetics,
which can overflow if the values for height and stride are large. Fix
the issue by multiplying with mul_u32_u32().

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Fixes: 32ae90c66fb6 ("drm/sysfb: Add efidrm for EFI displays")
Fixes: a84eb6abe2b6 ("drm/sysfb: Add vesadrm for VESA displays")
Reported-by: Sashiko <sashiko-bot@kernel.org>
Closes: https://lore.kernel.org/dri-devel/20260617114027.1F2A71F000E9@smtp.kernel.org/
Cc: Thomas Zimmermann <tzimmermann@suse.de>
Cc: Javier Martinez Canillas <javierm@redhat.com>
Cc: dri-devel@lists.freedesktop.org
Cc: <stable@vger.kernel.org> # v6.16+
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com>
Link: https://patch.msgid.link/20260618084327.46567-3-tzimmermann@suse.de
drivers/gpu/drm/sysfb/drm_sysfb_screen_info.c

index 361b7233600c252f352f705381e96d4e79bdba24..8b14eaa304c0294baec9925d854275526fd3e1c7 100644 (file)
@@ -2,6 +2,7 @@
 
 #include <linux/export.h>
 #include <linux/limits.h>
+#include <linux/math64.h>
 #include <linux/minmax.h>
 #include <linux/screen_info.h>
 
@@ -67,7 +68,7 @@ EXPORT_SYMBOL(drm_sysfb_get_stride_si);
 u64 drm_sysfb_get_visible_size_si(struct drm_device *dev, const struct screen_info *si,
                                  unsigned int height, unsigned int stride, u64 size)
 {
-       u64 vsize = height * stride;
+       u64 vsize = mul_u32_u32(height, stride);
 
        return drm_sysfb_get_validated_size0(dev, "visible size", vsize, size);
 }