fb_get_fscreeninfo(): don't bother with do_fb_ioctl()
authorAl Viro <viro@zeniv.linux.org.uk>
Sat, 27 May 2017 03:51:09 +0000 (23:51 -0400)
committerAl Viro <viro@zeniv.linux.org.uk>
Sat, 10 Jun 2017 03:50:58 +0000 (23:50 -0400)
it's easier to do the right thing directly

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
drivers/video/fbdev/core/fbmem.c

index 069fe7960df1cedd17c3f7119d2ab6a6989e46c1..5324358f110fa6e52e5c004a1bf59125b3b36753 100644 (file)
@@ -1331,22 +1331,13 @@ static int do_fscreeninfo_to_user(struct fb_fix_screeninfo *fix,
 static int fb_get_fscreeninfo(struct fb_info *info, unsigned int cmd,
                              unsigned long arg)
 {
-       mm_segment_t old_fs;
        struct fb_fix_screeninfo fix;
-       struct fb_fix_screeninfo32 __user *fix32;
-       int err;
-
-       fix32 = compat_ptr(arg);
-
-       old_fs = get_fs();
-       set_fs(KERNEL_DS);
-       err = do_fb_ioctl(info, cmd, (unsigned long) &fix);
-       set_fs(old_fs);
 
-       if (!err)
-               err = do_fscreeninfo_to_user(&fix, fix32);
-
-       return err;
+       if (!lock_fb_info(info))
+               return -ENODEV;
+       fix = info->fix;
+       unlock_fb_info(info);
+       return do_fscreeninfo_to_user(&fix, compat_ptr(arg));
 }
 
 static long fb_compat_ioctl(struct file *file, unsigned int cmd,