]> git.ipfire.org Git - thirdparty/kernel/linux.git/commit
HID: i2c-hid: fix potential buffer overflow in i2c_hid_get_report()
authorKwok Kin Ming <kenkinming2002@gmail.com>
Wed, 31 Dec 2025 18:18:26 +0000 (02:18 +0800)
committerBenjamin Tissoires <bentiss@kernel.org>
Wed, 7 Jan 2026 17:35:58 +0000 (18:35 +0100)
commit2497ff38c530b1af0df5130ca9f5ab22c5e92f29
tree4ceb17903fdf8cfb24a83b0fd3fefd45ec90cac3
parentf287ba5951a4b3a47305b64a3fcde5d0911adb9b
HID: i2c-hid: fix potential buffer overflow in i2c_hid_get_report()

`i2c_hid_xfer` is used to read `recv_len + sizeof(__le16)` bytes of data
into `ihid->rawbuf`.

The former can come from the userspace in the hidraw driver and is only
bounded by HID_MAX_BUFFER_SIZE(16384) by default (unless we also set
`max_buffer_size` field of `struct hid_ll_driver` which we do not).

The latter has size determined at runtime by the maximum size of
different report types you could receive on any particular device and
can be a much smaller value.

Fix this by truncating `recv_len` to `ihid->bufsize - sizeof(__le16)`.

The impact is low since access to hidraw devices requires root.

Signed-off-by: Kwok Kin Ming <kenkinming2002@gmail.com>
Signed-off-by: Benjamin Tissoires <bentiss@kernel.org>
drivers/hid/i2c-hid/i2c-hid-core.c