FAILED: patch "[PATCH] drm/sysfb: simpledrm: Improve framebuffer-size validation" failed to apply to 6.12-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 6.12-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.12.y
git checkout FETCH_HEAD
git cherry-pick -x 03f1a3545b721fa7fdadd00080e237519a286a97
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026090919-operation-hull-a6ea@gregkh' --subject-prefix 'PATCH 6.12.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 03f1a3545b721fa7fdadd00080e237519a286a97 Mon Sep 17 00:00:00 2001
From: Thomas Zimmermann <[email protected]>
Date: Thu, 25 Jun 2026 11:39:33 +0200
Subject: [PATCH] drm/sysfb: simpledrm: Improve framebuffer-size validation
Validate the framebuffer size from the firmware against the limitations of struct drm_display_mode. The type only stores sizes in 16-bit fields. Fail probing on errors.
v2:
- remove unused function simplefb_get_validated_int0() (Sashiko)
drivers/gpu/drm/sysfb/simpledrm.c +4 -11
@@ -48,13 +48,6 @@ simplefb_get_validated_int(struct drm_device *dev, const char *name,return drm_sysfb_get_validated_int (dev, name, value,INT_MAX ); } -static int -simplefb_get_validated_int0 (struct drm_device *dev,const char *name, -uint32_t value) -{ -return drm_sysfb_get_validated_int0 (dev, name, value,INT_MAX ); -} -static const struct drm_format_info *simplefb_get_validated_format (struct drm_device *dev,const char *format_name) {
@@ -88,14 +81,14 @@ static int simplefb_get_width_pd(struct drm_device *dev, const struct simplefb_platform_data *pd) { - return simplefb_get_validated_int0(dev, "width", pd->width); + return drm_sysfb_get_validated_int0(dev, "width", pd->width, U16_MAX); }static int simplefb_get_height_pd (struct drm_device *dev,const struct simplefb_platform_data *pd) { -return simplefb_get_validated_int0 (dev,"height" , pd->height); +return drm_sysfb_get_validated_int0 (dev,"height" , pd->height,U16_MAX ); } static int
@@ -144,7 +137,7 @@ simplefb_get_width_of(struct drm_device *dev, struct device_node *of_node)if (ret)return ret; -return simplefb_get_validated_int0 (dev,"width" , width); +return drm_sysfb_get_validated_int0 (dev,"width" , width,U16_MAX ); } static int
@@ -155,7 +148,7 @@ simplefb_get_height_of(struct drm_device *dev, struct device_node *of_node)if (ret)return ret; -return simplefb_get_validated_int0 (dev,"height" , height); +return drm_sysfb_get_validated_int0 (dev,"height" , height,U16_MAX ); } static int
Sasha Levin
maintainerPATCH 1/2 firmware: sysfb: Move bpp-depth calculation into screen_info helper
From: Thomas Zimmermann <[email protected]>
[ Upstream commit 1ce4c3aeef333be1e6290ec6d1f7891c2bfc7a1f ]
Move the calculation of the bits per pixels for screen_info into a helper function. This will make it available to other callers besides the firmware code.
Stable-dep-of: 03f1a3545b72 ("drm/sysfb: simpledrm: Improve framebuffer-size validation")
--- drivers/firmware/sysfb_simplefb.c | 31 +------------------------ drivers/video/screen_info_generic.c | 36 +++++++++++++++++++++++++++++ include/linux/screen_info.h | 2 ++ 3 files changed, 39 insertions(+), 30 deletions(-)
drivers/firmware/sysfb_simplefb.c +1 -30
@@ -35,36 +35,7 @@ __init bool sysfb_parse_mode(const struct screen_info *si,if (type !=VIDEO_TYPE_VLFB && type !=VIDEO_TYPE_EFI )return false; -/* -* The meaning of depth and bpp for direct-color formats is -* inconsistent: -* -* - DRM format info specifies depth as the number of color -* bits; including alpha, but not including filler bits. -* - Linux' EFI platform code computes lfb_depth from the -* individual color channels, including the reserved bits. -* - VBE 1.1 defines lfb_depth for XRGB1555 as 16, but later -* versions use 15. -* - On the kernel command line, 'bpp' of 32 is usually -* XRGB8888 including the filler bits, but 15 is XRGB1555 -* not including the filler bit. -* -* It's not easily possible to fix this in struct screen_info, -* as this could break UAPI. The best solution is to compute -* bits_per_pixel from the color bits, reserved bits and -* reported lfb_depth, whichever is highest. In the loop below, -* ignore simplefb formats with alpha bits, as EFI and VESA -* don't specify alpha channels. -*/ -if (si->lfb_depth >8 ) { - bits_per_pixel =max (max3 (si->red_size + si->red_pos, - si->green_size + si->green_pos, - si->blue_size + si->blue_pos), - si->rsvd_size + si->rsvd_pos); - bits_per_pixel =max_t (u32, bits_per_pixel, si->lfb_depth); - }else { - bits_per_pixel = si->lfb_depth; - } + bits_per_pixel =__screen_info_lfb_bits_per_pixel (si);for (i =0 ; i <ARRAY_SIZE (formats); ++i) {const struct simplefb_format *f = &formats[i];
drivers/video/screen_info_generic.c +36 -0
@@ -144,3 +144,39 @@ ssize_t screen_info_resources(const struct screen_info *si, struct resource *r,return pos - r; }EXPORT_SYMBOL (screen_info_resources); + +/* +* The meaning of depth and bpp for direct-color formats is +* inconsistent: +* +* - DRM format info specifies depth as the number of color +* bits; including alpha, but not including filler bits. +* - Linux' EFI platform code computes lfb_depth from the +* individual color channels, including the reserved bits. +* - VBE 1.1 defines lfb_depth for XRGB1555 as 16, but later +* versions use 15. +* - On the kernel command line, 'bpp' of 32 is usually +* XRGB8888 including the filler bits, but 15 is XRGB1555 +* not including the filler bit. +* +* It is not easily possible to fix this in struct screen_info, +* as this could break UAPI. The best solution is to compute +* bits_per_pixel from the color bits, reserved bits and +* reported lfb_depth, whichever is highest. +*/ + +u32 __screen_info_lfb_bits_per_pixel (const struct screen_info *si) +{ +u32 bits_per_pixel = si->lfb_depth; + +if (bits_per_pixel >8 ) { + bits_per_pixel =max (max3 (si->red_size + si->red_pos, + si->green_size + si->green_pos, + si->blue_size + si->blue_pos), + si->rsvd_size + si->rsvd_pos); + bits_per_pixel =max_t (u32, bits_per_pixel, si->lfb_depth); + } + +return bits_per_pixel; +} +EXPORT_SYMBOL (__screen_info_lfb_bits_per_pixel);
include/linux/screen_info.h +2 -0
@@ -128,6 +128,8 @@ static inline unsigned int screen_info_video_type(const struct screen_info *si)ssize_t screen_info_resources (const struct screen_info *si,struct resource *r,size_t num); +u32 __screen_info_lfb_bits_per_pixel (const struct screen_info *si); +#if defined(CONFIG_PCI )void screen_info_apply_fixups (void );struct pci_dev *screen_info_pci_dev (const struct screen_info *si);
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 2/2 drm/sysfb: simpledrm: Improve framebuffer-size validation
From: Thomas Zimmermann <[email protected]>
[ Upstream commit 03f1a3545b721fa7fdadd00080e237519a286a97 ]
Validate the framebuffer size from the firmware against the limitations of struct drm_display_mode. The type only stores sizes in 16-bit fields. Fail probing on errors.
v2:
- remove unused function simplefb_get_validated_int0() (Sashiko)
--- drivers/gpu/drm/tiny/simpledrm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/tiny/simpledrm.c +1 -1
@@ -54,7 +54,7 @@ static int simplefb_get_validated_int0(struct drm_device *dev, const char *name, uint32_t value) { - if (!value) { + if (!value || value > U16_MAX) { drm_err(dev, "simplefb: invalid framebuffer %s of %u\n", name, value);return -EINVAL ;
Signature · 1 line
2.53.0
Sasha Levin
maintainerPATCH 1/1 drm/sysfb: simpledrm: Improve framebuffer-size validation
In reply to [email protected]From: Thomas Zimmermann <[email protected]>
[ Upstream commit 03f1a3545b721fa7fdadd00080e237519a286a97 ]
Validate the framebuffer size from the firmware against the limitations of struct drm_display_mode. The type only stores sizes in 16-bit fields. Fail probing on errors.
v2:
- remove unused function simplefb_get_validated_int0() (Sashiko)
--- drivers/gpu/drm/tiny/simpledrm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/tiny/simpledrm.c +1 -1
@@ -54,7 +54,7 @@ static int simplefb_get_validated_int0(struct drm_device *dev, const char *name, uint32_t value) { - if (!value) { + if (!value || value > U16_MAX) { drm_err(dev, "simplefb: invalid framebuffer %s of %u\n", name, value);return -EINVAL ;
Signature · 1 line
2.53.0