Skip to content

Commit 2f1c452

Browse files
ZheyuMahdeller
authored andcommitted
video: fbdev: arkfb: Fix a divide-by-zero bug in ark_set_pixclock()
Since the user can control the arguments of the ioctl() from the user space, under special arguments that may result in a divide-by-zero bug in: drivers/video/fbdev/arkfb.c:784: ark_set_pixclock(info, (hdiv * info->var.pixclock) / hmul); with hdiv=1, pixclock=1 and hmul=2 you end up with (1*1)/2 = (int) 0. and then in: drivers/video/fbdev/arkfb.c:504: rv = dac_set_freq(par->dac, 0, 1000000000 / pixclock); we'll get a division-by-zero. The following log can reveal it: divide error: 0000 [#1] PREEMPT SMP KASAN PTI RIP: 0010:ark_set_pixclock drivers/video/fbdev/arkfb.c:504 [inline] RIP: 0010:arkfb_set_par+0x10fc/0x24c0 drivers/video/fbdev/arkfb.c:784 Call Trace: fb_set_var+0x604/0xeb0 drivers/video/fbdev/core/fbmem.c:1034 do_fb_ioctl+0x234/0x670 drivers/video/fbdev/core/fbmem.c:1110 fb_ioctl+0xdd/0x130 drivers/video/fbdev/core/fbmem.c:1189 Fix this by checking the argument of ark_set_pixclock() first. Fixes: 681e147 ("arkfb: new framebuffer driver for ARK Logic cards") Signed-off-by: Zheyu Ma <[email protected]> Signed-off-by: Helge Deller <[email protected]>
1 parent c5c7502 commit 2f1c452

File tree

1 file changed

+6
-1
lines changed

1 file changed

+6
-1
lines changed

drivers/video/fbdev/arkfb.c

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -781,7 +781,12 @@ static int arkfb_set_par(struct fb_info *info)
781781
return -EINVAL;
782782
}
783783

784-
ark_set_pixclock(info, (hdiv * info->var.pixclock) / hmul);
784+
value = (hdiv * info->var.pixclock) / hmul;
785+
if (!value) {
786+
fb_dbg(info, "invalid pixclock\n");
787+
value = 1;
788+
}
789+
ark_set_pixclock(info, value);
785790
svga_set_timings(par->state.vgabase, &ark_timing_regs, &(info->var), hmul, hdiv,
786791
(info->var.vmode & FB_VMODE_DOUBLE) ? 2 : 1,
787792
(info->var.vmode & FB_VMODE_INTERLACED) ? 2 : 1,

0 commit comments

Comments
 (0)