summaryrefslogtreecommitdiffstats
path: root/drivers/video/fbdev/arcfb.c
diff options
context:
space:
mode:
authorThomas Zimmermann <tzimmermann@suse.de>2023-04-28 14:24:50 +0200
committerThomas Zimmermann <tzimmermann@suse.de>2023-05-08 15:28:34 +0200
commit3f8974f68f408f4983443b745a3cf95b06112469 (patch)
tree7bf2c45c6d071b3d865efaa6135cb5d70e24069d /drivers/video/fbdev/arcfb.c
parent453bd91302f16ddb8a2f5eb3df9fda3206dbacef (diff)
downloadlinux-stable-3f8974f68f408f4983443b745a3cf95b06112469.tar.gz
linux-stable-3f8974f68f408f4983443b745a3cf95b06112469.tar.bz2
linux-stable-3f8974f68f408f4983443b745a3cf95b06112469.zip
fbdev: Validate info->screen_{base, buffer} in fb_ops implementations
Push the test for info->screen_base from fb_read() and fb_write() into the implementations of struct fb_ops.{fb_read,fb_write}. In cases where the driver operates on info->screen_buffer, test this field instead. While bothi fields, screen_base and screen_buffer, are stored in the same location, they refer to different address spaces. For correctness, we want to test each field in exactly the code that uses it. v2: * also test screen_base in pvr2fb (Geert) * also test screen_buffer in ivtvfb, arcfb, broadsheetfb, hecubafb, metronomefb and ssd1307fb (Geert) * give a rational for the change (Geert) Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Tested-by: Sui Jingfeng <suijingfeng@loongson.cn> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Acked-by: Helge Deller <deller@gmx.de> Link: https://patchwork.freedesktop.org/patch/msgid/20230428122452.4856-18-tzimmermann@suse.de
Diffstat (limited to 'drivers/video/fbdev/arcfb.c')
-rw-r--r--drivers/video/fbdev/arcfb.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/video/fbdev/arcfb.c b/drivers/video/fbdev/arcfb.c
index 088c4b30fd31..7750e020839e 100644
--- a/drivers/video/fbdev/arcfb.c
+++ b/drivers/video/fbdev/arcfb.c
@@ -451,6 +451,9 @@ static ssize_t arcfb_write(struct fb_info *info, const char __user *buf,
struct arcfb_par *par;
unsigned int xres;
+ if (!info->screen_buffer)
+ return -ENODEV;
+
p = *ppos;
par = info->par;
xres = info->var.xres;