summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2022-04-05 23:03:23 +0200
committerDaniel Vetter <daniel.vetter@ffwll.ch>2022-04-07 16:52:13 +0200
commit9ad5cc9bcfd62b0f39e7f85992d2a371ff369324 (patch)
tree4d0a371995fd9d6a29a695f47fe1245a40ed8a47
parent9b0a490e71ebf76b0b59ab9382f5289f8a3dcf9e (diff)
downloadlinux-9ad5cc9bcfd62b0f39e7f85992d2a371ff369324.tar.gz
linux-9ad5cc9bcfd62b0f39e7f85992d2a371ff369324.tar.bz2
linux-9ad5cc9bcfd62b0f39e7f85992d2a371ff369324.zip
fbdev/sysfs: Fix locking
fb_set_var requires we hold the fb_info lock. Or at least this now matches what the ioctl does ... Note that ps3fb and sh_mobile_lcdcfb are busted in different ways here, but I will not fix them up. Also in practice this isn't a big deal, because really variable fbdev state is actually protected by console_lock (because fbcon just doesn't bother with lock_fb_info() at all), and lock_fb_info protecting anything is really just a neat lie. But that's a much bigger fish to fry. Acked-by: Thomas Zimmermann <tzimmermann@suse.de> Acked-by: Sam Ravnborg <sam@ravnborg.org> Signed-off-by: Daniel Vetter <daniel.vetter@intel.com> Cc: Helge Deller <deller@gmx.de> Cc: Daniel Vetter <daniel@ffwll.ch> Cc: Qing Wang <wangqing@vivo.com> Cc: Sam Ravnborg <sam@ravnborg.org> Link: https://patchwork.freedesktop.org/patch/msgid/20220405210335.3434130-6-daniel.vetter@ffwll.ch
-rw-r--r--drivers/video/fbdev/core/fbsysfs.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/video/fbdev/core/fbsysfs.c b/drivers/video/fbdev/core/fbsysfs.c
index 26892940c213..8c1ee9ecec3d 100644
--- a/drivers/video/fbdev/core/fbsysfs.c
+++ b/drivers/video/fbdev/core/fbsysfs.c
@@ -91,9 +91,11 @@ static int activate(struct fb_info *fb_info, struct fb_var_screeninfo *var)
var->activate |= FB_ACTIVATE_FORCE;
console_lock();
+ lock_fb_info(fb_info);
err = fb_set_var(fb_info, var);
if (!err)
fbcon_update_vcs(fb_info, var->activate & FB_ACTIVATE_ALL);
+ unlock_fb_info(fb_info);
console_unlock();
if (err)
return err;