* Re: [PATCH 6.1.y] HID: core: Harden s32ton() against conversion to 0 bits
[not found] <TY3P301MB065899BB05E5C334025F7963C4D9A@TY3P301MB0658.JPNP301.PROD.OUTLOOK.COM>
@ 2025-12-03 7:31 ` syzbot
0 siblings, 0 replies; 2+ messages in thread
From: syzbot @ 2025-12-03 7:31 UTC (permalink / raw)
To: lanbincn; +Cc: lanbincn, linux-kernel, syzkaller-bugs
> #syz test:
This bug is already marked as fixed. No point in testing.
> git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git linux-6.1.y
>
> drivers/hid/hid-core.c | 7 ++++++-
> 1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
> index ed65523d77c2..c8cca0c7ec67 100644
> --- a/drivers/hid/hid-core.c
> +++ b/drivers/hid/hid-core.c
> @@ -1354,7 +1354,12 @@ EXPORT_SYMBOL_GPL(hid_snto32);
>
> static u32 s32ton(__s32 value, unsigned n)
> {
> - s32 a = value >> (n - 1);
> + s32 a;
> + if (!value || !n)
> + return 0;
> +
> + a = value >> (n - 1);
> +
> if (a && a != -1)
> return value < 0 ? 1 << (n - 1) : (1 << (n - 1)) - 1;
> return value & ((1 << n) - 1);
> --
> 2.43.0
>
>
^ permalink raw reply [flat|nested] 2+ messages in thread
* [PATCH 6.1.y] HID: core: Harden s32ton() against conversion to 0 bits
@ 2025-12-03 11:24 jetlan9
0 siblings, 0 replies; 2+ messages in thread
From: jetlan9 @ 2025-12-03 11:24 UTC (permalink / raw)
To: stable
Cc: Alan Stern, syzbot+b63d677d63bcac06cf90, Benjamin Tissoires,
Wenshan Lan
From: Alan Stern <stern@rowland.harvard.edu>
[ Upstream commit a6b87bfc2ab5bccb7ad953693c85d9062aef3fdd ]
Testing by the syzbot fuzzer showed that the HID core gets a
shift-out-of-bounds exception when it tries to convert a 32-bit
quantity to a 0-bit quantity. Ideally this should never occur, but
there are buggy devices and some might have a report field with size
set to zero; we shouldn't reject the report or the device just because
of that.
Instead, harden the s32ton() routine so that it returns a reasonable
result instead of crashing when it is called with the number of bits
set to 0 -- the same as what snto32() does.
Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Reported-by: syzbot+b63d677d63bcac06cf90@syzkaller.appspotmail.com
Closes: https://lore.kernel.org/linux-usb/68753a08.050a0220.33d347.0008.GAE@google.com/
Tested-by: syzbot+b63d677d63bcac06cf90@syzkaller.appspotmail.com
Fixes: dde5845a529f ("[PATCH] Generic HID layer - code split")
Cc: stable@vger.kernel.org
Link: https://patch.msgid.link/613a66cd-4309-4bce-a4f7-2905f9bce0c9@rowland.harvard.edu
Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
[ s32ton() was moved by c653ffc28340 ("HID: stop exporting hid_snto32()").
Minor context change fixed. ]
Signed-off-by: Wenshan Lan <jetlan9@163.com>
---
drivers/hid/hid-core.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index ed65523d77c2..c8cca0c7ec67 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -1354,7 +1354,12 @@ EXPORT_SYMBOL_GPL(hid_snto32);
static u32 s32ton(__s32 value, unsigned n)
{
- s32 a = value >> (n - 1);
+ s32 a;
+ if (!value || !n)
+ return 0;
+
+ a = value >> (n - 1);
+
if (a && a != -1)
return value < 0 ? 1 << (n - 1) : (1 << (n - 1)) - 1;
return value & ((1 << n) - 1);
--
2.43.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2025-12-03 11:35 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <TY3P301MB065899BB05E5C334025F7963C4D9A@TY3P301MB0658.JPNP301.PROD.OUTLOOK.COM>
2025-12-03 7:31 ` [PATCH 6.1.y] HID: core: Harden s32ton() against conversion to 0 bits syzbot
2025-12-03 11:24 jetlan9
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.