Skip to content

Commit 19f953e

Browse files
FantasqueXhdeller
authored andcommitted
fbdev: fb_pm2fb: Avoid potential divide by zero error
In `do_fb_ioctl()` of fbmem.c, if cmd is FBIOPUT_VSCREENINFO, var will be copied from user, then go through `fb_set_var()` and `info->fbops->fb_check_var()` which could may be `pm2fb_check_var()`. Along the path, `var->pixclock` won't be modified. This function checks whether reciprocal of `var->pixclock` is too high. If `var->pixclock` is zero, there will be a divide by zero error. So, it is necessary to check whether denominator is zero to avoid crash. As this bug is found by Syzkaller, logs are listed below. divide error in pm2fb_check_var Call Trace: <TASK> fb_set_var+0x367/0xeb0 drivers/video/fbdev/core/fbmem.c:1015 do_fb_ioctl+0x234/0x670 drivers/video/fbdev/core/fbmem.c:1110 fb_ioctl+0xdd/0x130 drivers/video/fbdev/core/fbmem.c:1189 Reported-by: Zheyu Ma <[email protected]> Signed-off-by: Letu Ren <[email protected]> Signed-off-by: Helge Deller <[email protected]>
1 parent 868ce96 commit 19f953e

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

drivers/video/fbdev/pm2fb.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -617,6 +617,11 @@ static int pm2fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
617617
return -EINVAL;
618618
}
619619

620+
if (!var->pixclock) {
621+
DPRINTK("pixclock is zero\n");
622+
return -EINVAL;
623+
}
624+
620625
if (PICOS2KHZ(var->pixclock) > PM2_MAX_PIXCLOCK) {
621626
DPRINTK("pixclock too high (%ldKHz)\n",
622627
PICOS2KHZ(var->pixclock));

0 commit comments

Comments
 (0)