FAILED: patch "[PATCH] drm/sysfb: simpledrm: Improve panel-size validation" failed to apply to 6.6-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 6.6-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.6.y
git checkout FETCH_HEAD
git cherry-pick -x 3a75a0761914d01c7362adf1f906cc1d1762c189
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026090930-septum-throttle-3dae@gregkh' --subject-prefix 'PATCH 6.6.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 3a75a0761914d01c7362adf1f906cc1d1762c189 Mon Sep 17 00:00:00 2001
From: Thomas Zimmermann <[email protected]>
Date: Thu, 25 Jun 2026 11:39:34 +0200
Subject: [PATCH] drm/sysfb: simpledrm: Improve panel-size validation
Validate the panel size from the device-tree node against the limitations of struct drm_display_mode. The type only stores sizes in 16-bit fields. Fail transparently on errors; do not warn.
v3:
- move comments to a more prominent place (Thierry) v2:
- only use initialized values in debugging output (Sashiko)
drivers/gpu/drm/sysfb/simpledrm.c +46 -3
@@ -193,6 +193,39 @@ simplefb_get_memory_of(struct drm_device *dev, struct device_node *of_node)return res; } +static int __simplefb_get_panel_size_mm_of (struct drm_device *dev, +struct device_node *of_panel_node, +const char *name) +{ +int ret; +u32 value; + + ret =of_property_read_u32 (of_panel_node, name, &value); +if (ret) { +drm_dbg (dev,"simplefb: cannot parse panel %s: error %d\n" , + name, ret); +return ret; + }else if (value >U16_MAX ) { +drm_dbg (dev,"simplefb: panel %s of %u exceeds maximum value\n" , + name, value); +return -EINVAL ; + } + +return value; +} + +static int simplefb_get_panel_width_mm_of (struct drm_device *dev, +struct device_node *of_panel_node) +{ +return __simplefb_get_panel_size_mm_of (dev, of_panel_node,"width-mm" ); +} + +static int simplefb_get_panel_height_mm_of (struct drm_device *dev, +struct device_node *of_panel_node) +{ +return __simplefb_get_panel_size_mm_of (dev, of_panel_node,"height-mm" ); +} +/* * Simple Framebuffer device */
@@ -594,7 +627,7 @@ static struct simpledrm_device *simpledrm_device_create(struct drm_driver *drv,struct drm_sysfb_device *sysfb;struct drm_device *dev;int width, height, stride; -int width_mm =0 , height_mm =0 ; +u16 width_mm =0 , height_mm =0 ;struct device_node *panel_node;const struct drm_format_info *format;struct resource *res, *mem =NULL ;
@@ -658,8 +691,18 @@ static struct simpledrm_device *simpledrm_device_create(struct drm_driver *drv,return ERR_CAST (mem); panel_node =of_parse_phandle (of_node,"panel" ,0 );if (panel_node) { -simplefb_read_u32_of (dev, panel_node,"width-mm" , &width_mm); -simplefb_read_u32_of (dev, panel_node,"height-mm" , &height_mm); +/* +* Ignore errors from parsing the physical panel +* size. Using the pre-initialized sizes of 0 will +* make drm_sysfb_mode() calculate a default physical +* size based on a resolution of 96 dpi. +*/ + ret =simplefb_get_panel_width_mm_of (dev, panel_node); +if (ret >0 ) + width_mm = ret; + ret =simplefb_get_panel_height_mm_of (dev, panel_node); +if (ret >0 ) + height_mm = ret;of_node_put (panel_node); } }else {
Sasha Levin
maintainerPATCH 1/1 drm/sysfb: simpledrm: Improve panel-size validation
From: Thomas Zimmermann <[email protected]>
[ Upstream commit 3a75a0761914d01c7362adf1f906cc1d1762c189 ]
Validate the panel size from the device-tree node against the limitations of struct drm_display_mode. The type only stores sizes in 16-bit fields. Fail transparently on errors; do not warn.
v3:
- move comments to a more prominent place (Thierry) v2:
- only use initialized values in debugging output (Sashiko)
--- drivers/gpu/drm/tiny/simpledrm.c | 49 ++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 3 deletions(-)
drivers/gpu/drm/tiny/simpledrm.c +46 -3
@@ -210,6 +210,39 @@ simplefb_get_memory_of(struct drm_device *dev, struct device_node *of_node)return res; } +static int __simplefb_get_panel_size_mm_of (struct drm_device *dev, +struct device_node *of_panel_node, +const char *name) +{ +int ret; +u32 value; + + ret =of_property_read_u32 (of_panel_node, name, &value); +if (ret) { +drm_dbg (dev,"simplefb: cannot parse panel %s: error %d\n" , + name, ret); +return ret; + }else if (value >U16_MAX ) { +drm_dbg (dev,"simplefb: panel %s of %u exceeds maximum value\n" , + name, value); +return -EINVAL ; + } + +return value; +} + +static int simplefb_get_panel_width_mm_of (struct drm_device *dev, +struct device_node *of_panel_node) +{ +return __simplefb_get_panel_size_mm_of (dev, of_panel_node,"width-mm" ); +} + +static int simplefb_get_panel_height_mm_of (struct drm_device *dev, +struct device_node *of_panel_node) +{ +return __simplefb_get_panel_size_mm_of (dev, of_panel_node,"height-mm" ); +} +/* * Simple Framebuffer device */
@@ -625,7 +658,7 @@ static struct simpledrm_device *simpledrm_device_create(struct drm_driver *drv,struct simpledrm_device *sdev;struct drm_device *dev;int width, height, stride; -int width_mm =0 , height_mm =0 ; +u16 width_mm =0 , height_mm =0 ;struct device_node *panel_node;const struct drm_format_info *format;struct resource *res, *mem =NULL ;
@@ -685,8 +718,18 @@ static struct simpledrm_device *simpledrm_device_create(struct drm_driver *drv,return ERR_CAST (mem); panel_node =of_parse_phandle (of_node,"panel" ,0 );if (panel_node) { -simplefb_read_u32_of (dev, panel_node,"width-mm" , &width_mm); -simplefb_read_u32_of (dev, panel_node,"height-mm" , &height_mm); +/* +* Ignore errors from parsing the physical panel +* size. Using the pre-initialized sizes of 0 will +* make drm_sysfb_mode() calculate a default physical +* size based on a resolution of 96 dpi. +*/ + ret =simplefb_get_panel_width_mm_of (dev, panel_node); +if (ret >0 ) + width_mm = ret; + ret =simplefb_get_panel_height_mm_of (dev, panel_node); +if (ret >0 ) + height_mm = ret;of_node_put (panel_node); } }else {
Signature · 1 line
2.53.0