diff mbox series

HID: core: remove unnecessary WARN_ON() in implement()

Message ID 20240517141914.8604-1-n.zhandarovich@fintech.ru (mailing list archive)
State Mainlined
Commit 4aa2dcfbad538adf7becd0034a3754e1bd01b2b5
Delegated to: Jiri Kosina
Headers show
Series HID: core: remove unnecessary WARN_ON() in implement() | expand

Commit Message

Nikita Zhandarovich May 17, 2024, 2:19 p.m. UTC
Syzkaller hit a warning [1] in a call to implement() when trying
to write a value into a field of smaller size in an output report.

Since implement() already has a warn message printed out with the
help of hid_warn() and value in question gets trimmed with:
	...
	value &= m;
	...
WARN_ON may be considered superfluous. Remove it to suppress future
syzkaller triggers.

[1]
WARNING: CPU: 0 PID: 5084 at drivers/hid/hid-core.c:1451 implement drivers/hid/hid-core.c:1451 [inline]
WARNING: CPU: 0 PID: 5084 at drivers/hid/hid-core.c:1451 hid_output_report+0x548/0x760 drivers/hid/hid-core.c:1863
Modules linked in:
CPU: 0 PID: 5084 Comm: syz-executor424 Not tainted 6.9.0-rc7-syzkaller-00183-gcf87f46fd34d #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/02/2024
RIP: 0010:implement drivers/hid/hid-core.c:1451 [inline]
RIP: 0010:hid_output_report+0x548/0x760 drivers/hid/hid-core.c:1863
...
Call Trace:
 <TASK>
 __usbhid_submit_report drivers/hid/usbhid/hid-core.c:591 [inline]
 usbhid_submit_report+0x43d/0x9e0 drivers/hid/usbhid/hid-core.c:636
 hiddev_ioctl+0x138b/0x1f00 drivers/hid/usbhid/hiddev.c:726
 vfs_ioctl fs/ioctl.c:51 [inline]
 __do_sys_ioctl fs/ioctl.c:904 [inline]
 __se_sys_ioctl+0xfc/0x170 fs/ioctl.c:890
 do_syscall_x64 arch/x86/entry/common.c:52 [inline]
 do_syscall_64+0xf5/0x240 arch/x86/entry/common.c:83
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
...

Fixes: 95d1c8951e5b ("HID: simplify implement() a bit")
Reported-by: syzbot+5186630949e3c55f0799@syzkaller.appspotmail.com
Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>
---
 drivers/hid/hid-core.c | 1 -
 1 file changed, 1 deletion(-)

Comments

Jiri Kosina June 4, 2024, 7:50 a.m. UTC | #1
On Fri, 17 May 2024, Nikita Zhandarovich wrote:

> Syzkaller hit a warning [1] in a call to implement() when trying
> to write a value into a field of smaller size in an output report.
> 
> Since implement() already has a warn message printed out with the
> help of hid_warn() and value in question gets trimmed with:
> 	...
> 	value &= m;
> 	...
> WARN_ON may be considered superfluous. Remove it to suppress future
> syzkaller triggers.
> 
> [1]
> WARNING: CPU: 0 PID: 5084 at drivers/hid/hid-core.c:1451 implement drivers/hid/hid-core.c:1451 [inline]
> WARNING: CPU: 0 PID: 5084 at drivers/hid/hid-core.c:1451 hid_output_report+0x548/0x760 drivers/hid/hid-core.c:1863
> Modules linked in:
> CPU: 0 PID: 5084 Comm: syz-executor424 Not tainted 6.9.0-rc7-syzkaller-00183-gcf87f46fd34d #0
> Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 04/02/2024
> RIP: 0010:implement drivers/hid/hid-core.c:1451 [inline]
> RIP: 0010:hid_output_report+0x548/0x760 drivers/hid/hid-core.c:1863
> ...
> Call Trace:
>  <TASK>
>  __usbhid_submit_report drivers/hid/usbhid/hid-core.c:591 [inline]
>  usbhid_submit_report+0x43d/0x9e0 drivers/hid/usbhid/hid-core.c:636
>  hiddev_ioctl+0x138b/0x1f00 drivers/hid/usbhid/hiddev.c:726
>  vfs_ioctl fs/ioctl.c:51 [inline]
>  __do_sys_ioctl fs/ioctl.c:904 [inline]
>  __se_sys_ioctl+0xfc/0x170 fs/ioctl.c:890
>  do_syscall_x64 arch/x86/entry/common.c:52 [inline]
>  do_syscall_64+0xf5/0x240 arch/x86/entry/common.c:83
>  entry_SYSCALL_64_after_hwframe+0x77/0x7f
> ...
> 
> Fixes: 95d1c8951e5b ("HID: simplify implement() a bit")
> Reported-by: syzbot+5186630949e3c55f0799@syzkaller.appspotmail.com
> Signed-off-by: Nikita Zhandarovich <n.zhandarovich@fintech.ru>

I've added

	Suggested-by: Alan Stern <stern@rowland.harvard.edu>

and applied. Thanks,
diff mbox series

Patch

diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index b1fa0378e8f4..74efda212c55 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -1448,7 +1448,6 @@  static void implement(const struct hid_device *hid, u8 *report,
 			hid_warn(hid,
 				 "%s() called with too large value %d (n: %d)! (%s)\n",
 				 __func__, value, n, current->comm);
-			WARN_ON(1);
 			value &= m;
 		}
 	}