|
Takashi Iwai |
8bfc61 |
From 825712b09b1658be88d3fab38180bb9dbe6f43f5 Mon Sep 17 00:00:00 2001
|
|
Takashi Iwai |
8bfc61 |
From: Zheyu Ma <zheyuma97@gmail.com>
|
|
Takashi Iwai |
8bfc61 |
Date: Mon, 26 Jul 2021 10:03:54 +0000
|
|
Takashi Iwai |
8bfc61 |
Subject: [PATCH] video: fbdev: kyro: Error out if 'pixclock' equals zero
|
|
Takashi Iwai |
8bfc61 |
Git-commit: 1520b4b7ba964f8eec2e7dd14c571d50de3e5191
|
|
Takashi Iwai |
8bfc61 |
Patch-mainline: v5.15-rc1
|
|
Takashi Iwai |
8bfc61 |
References: stable-5.14.6
|
|
Takashi Iwai |
8bfc61 |
|
|
Takashi Iwai |
8bfc61 |
[ Upstream commit 1520b4b7ba964f8eec2e7dd14c571d50de3e5191 ]
|
|
Takashi Iwai |
8bfc61 |
|
|
Takashi Iwai |
8bfc61 |
The userspace program could pass any values to the driver through
|
|
Takashi Iwai |
8bfc61 |
ioctl() interface. if the driver doesn't check the value of 'pixclock',
|
|
Takashi Iwai |
8bfc61 |
it may cause divide error because the value of 'lineclock' and
|
|
Takashi Iwai |
8bfc61 |
'frameclock' will be zero.
|
|
Takashi Iwai |
8bfc61 |
|
|
Takashi Iwai |
8bfc61 |
Fix this by checking whether 'pixclock' is zero in kyrofb_check_var().
|
|
Takashi Iwai |
8bfc61 |
|
|
Takashi Iwai |
8bfc61 |
The following log reveals it:
|
|
Takashi Iwai |
8bfc61 |
|
|
Takashi Iwai |
8bfc61 |
[ 103.073930] divide error: 0000 [#1] PREEMPT SMP KASAN PTI
|
|
Takashi Iwai |
8bfc61 |
[ 103.073942] CPU: 4 PID: 12483 Comm: syz-executor Not tainted 5.14.0-rc2-00478-g2734d6c1b1a0-dirty #118
|
|
Takashi Iwai |
8bfc61 |
[ 103.073959] RIP: 0010:kyrofb_set_par+0x316/0xc80
|
|
Takashi Iwai |
8bfc61 |
[ 103.074045] Call Trace:
|
|
Takashi Iwai |
8bfc61 |
[ 103.074048] ? ___might_sleep+0x1ee/0x2d0
|
|
Takashi Iwai |
8bfc61 |
[ 103.074060] ? kyrofb_ioctl+0x330/0x330
|
|
Takashi Iwai |
8bfc61 |
[ 103.074069] fb_set_var+0x5bf/0xeb0
|
|
Takashi Iwai |
8bfc61 |
[ 103.074078] ? fb_blank+0x1a0/0x1a0
|
|
Takashi Iwai |
8bfc61 |
[ 103.074085] ? lock_acquire+0x3bd/0x530
|
|
Takashi Iwai |
8bfc61 |
[ 103.074094] ? lock_release+0x810/0x810
|
|
Takashi Iwai |
8bfc61 |
[ 103.074103] ? ___might_sleep+0x1ee/0x2d0
|
|
Takashi Iwai |
8bfc61 |
[ 103.074114] ? __mutex_lock+0x620/0x1190
|
|
Takashi Iwai |
8bfc61 |
[ 103.074126] ? trace_hardirqs_on+0x6a/0x1c0
|
|
Takashi Iwai |
8bfc61 |
[ 103.074137] do_fb_ioctl+0x31e/0x700
|
|
Takashi Iwai |
8bfc61 |
[ 103.074144] ? fb_getput_cmap+0x280/0x280
|
|
Takashi Iwai |
8bfc61 |
[ 103.074152] ? rcu_read_lock_sched_held+0x11/0x80
|
|
Takashi Iwai |
8bfc61 |
[ 103.074162] ? rcu_read_lock_sched_held+0x11/0x80
|
|
Takashi Iwai |
8bfc61 |
[ 103.074171] ? __sanitizer_cov_trace_switch+0x67/0xf0
|
|
Takashi Iwai |
8bfc61 |
[ 103.074181] ? __sanitizer_cov_trace_const_cmp2+0x20/0x80
|
|
Takashi Iwai |
8bfc61 |
[ 103.074191] ? do_vfs_ioctl+0x14b/0x16c0
|
|
Takashi Iwai |
8bfc61 |
[ 103.074199] ? vfs_fileattr_set+0xb60/0xb60
|
|
Takashi Iwai |
8bfc61 |
[ 103.074207] ? rcu_read_lock_sched_held+0x11/0x80
|
|
Takashi Iwai |
8bfc61 |
[ 103.074216] ? lock_release+0x483/0x810
|
|
Takashi Iwai |
8bfc61 |
[ 103.074224] ? __fget_files+0x217/0x3d0
|
|
Takashi Iwai |
8bfc61 |
[ 103.074234] ? __fget_files+0x239/0x3d0
|
|
Takashi Iwai |
8bfc61 |
[ 103.074243] ? do_fb_ioctl+0x700/0x700
|
|
Takashi Iwai |
8bfc61 |
[ 103.074250] fb_ioctl+0xe6/0x130
|
|
Takashi Iwai |
8bfc61 |
|
|
Takashi Iwai |
8bfc61 |
Signed-off-by: Zheyu Ma <zheyuma97@gmail.com>
|
|
Takashi Iwai |
8bfc61 |
Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
|
|
Takashi Iwai |
8bfc61 |
Link: https://patchwork.freedesktop.org/patch/msgid/1627293835-17441-3-git-send-email-zheyuma97@gmail.com
|
|
Takashi Iwai |
8bfc61 |
Signed-off-by: Sasha Levin <sashal@kernel.org>
|
|
Takashi Iwai |
8bfc61 |
Acked-by: Takashi Iwai <tiwai@suse.de>
|
|
Takashi Iwai |
8bfc61 |
|
|
Takashi Iwai |
8bfc61 |
---
|
|
Takashi Iwai |
8bfc61 |
drivers/video/fbdev/kyro/fbdev.c | 3 +++
|
|
Takashi Iwai |
8bfc61 |
1 file changed, 3 insertions(+)
|
|
Takashi Iwai |
8bfc61 |
|
|
Takashi Iwai |
8bfc61 |
diff --git a/drivers/video/fbdev/kyro/fbdev.c b/drivers/video/fbdev/kyro/fbdev.c
|
|
Takashi Iwai |
8bfc61 |
index 4b8c7c16b1df..25801e8e3f74 100644
|
|
Takashi Iwai |
8bfc61 |
--- a/drivers/video/fbdev/kyro/fbdev.c
|
|
Takashi Iwai |
8bfc61 |
+++ b/drivers/video/fbdev/kyro/fbdev.c
|
|
Takashi Iwai |
8bfc61 |
@@ -399,6 +399,9 @@ static int kyrofb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
|
|
Takashi Iwai |
8bfc61 |
{
|
|
Takashi Iwai |
8bfc61 |
struct kyrofb_info *par = info->par;
|
|
Takashi Iwai |
8bfc61 |
|
|
Takashi Iwai |
8bfc61 |
+ if (!var->pixclock)
|
|
Takashi Iwai |
8bfc61 |
+ return -EINVAL;
|
|
Takashi Iwai |
8bfc61 |
+
|
|
Takashi Iwai |
8bfc61 |
if (var->bits_per_pixel != 16 && var->bits_per_pixel != 32) {
|
|
Takashi Iwai |
8bfc61 |
printk(KERN_WARNING "kyrofb: depth not supported: %u\n", var->bits_per_pixel);
|
|
Takashi Iwai |
8bfc61 |
return -EINVAL;
|
|
Takashi Iwai |
8bfc61 |
--
|
|
Takashi Iwai |
8bfc61 |
2.26.2
|
|
Takashi Iwai |
8bfc61 |
|