variable var->pixclock can be set by user. In case it equals to zero, divide by zero would occur in pm3fb_check_var. Similar crashes have happened in other fbdev drivers. There is no check and modification on var->pixclock along the call chain to pm3fb_check_var. So we fix this by checking whether 'pixclock' is zero.
Similar commit: commit 16844e58704 ("video: fbdev: tridentfb: Error out if 'pixclock' equals zero") Signed-off-by: Alex Guo <alexguo1...@gmail.com> --- drivers/video/fbdev/pm3fb.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/video/fbdev/pm3fb.c b/drivers/video/fbdev/pm3fb.c index 6e55e42514d6..d9b3f1937ce6 100644 --- a/drivers/video/fbdev/pm3fb.c +++ b/drivers/video/fbdev/pm3fb.c @@ -998,6 +998,9 @@ static int pm3fb_check_var(struct fb_var_screeninfo *var, struct fb_info *info) return -EINVAL; } + if (!var->pixclock) + return -EINVAL; + if (PICOS2KHZ(var->pixclock) > PM3_MAX_PIXCLOCK) { DPRINTK("pixclock too high (%ldKHz)\n", PICOS2KHZ(var->pixclock)); -- 2.34.1