• Zheyu Ma's avatar
    video: fbdev: i740fb: Check the argument of i740_calc_vclk() · 40bf722f
    Zheyu Ma authored
    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.
    
    If the user provides an improper 'pixclock' value that makes the argumet
    of i740_calc_vclk() less than 'I740_RFREQ_FIX', it will cause a
    divide-by-zero bug in:
        drivers/video/fbdev/i740fb.c:353 p_best = min(15, ilog2(I740_MAX_VCO_FREQ / (freq / I740_RFREQ_FIX)));
    
    The following log can reveal it:
    
    divide error: 0000 [#1] PREEMPT SMP KASAN PTI
    RIP: 0010:i740_calc_vclk drivers/video/fbdev/i740fb.c:353 [inline]
    RIP: 0010:i740fb_decode_var drivers/video/fbdev/i740fb.c:646 [inline]
    RIP: 0010:i740fb_set_par+0x163f/0x3b70 drivers/video/fbdev/i740fb.c:742
    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 i740_calc_vclk() first.
    Signed-off-by: default avatarZheyu Ma <zheyuma97@gmail.com>
    Signed-off-by: default avatarHelge Deller <deller@gmx.de>
    40bf722f
i740fb.c 33 KB