]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
HID: hid-goodix-spi: validate report size to prevent stack buffer overflow
authorTianchu Chen <flynnnchen@tencent.com>
Fri, 29 May 2026 13:42:47 +0000 (13:42 +0000)
committerJiri Kosina <jkosina@suse.com>
Wed, 10 Jun 2026 16:34:56 +0000 (18:34 +0200)
goodix_hid_set_raw_report() builds a protocol frame in a 128-byte stack
buffer (tmp_buf), writing an 11-12 byte header followed by the
caller-supplied report data.  The HID core caps report size at
HID_MAX_BUFFER_SIZE (16384) by default, while the driver does not set
hid_ll_driver.max_buffer_size and performs no bounds checking before
copying the payload:

    memcpy(tmp_buf + tx_len, buf, len);

A hidraw SET_REPORT ioctl with a report larger than ~116 bytes
overflows the stack buffer.

Add a size check after constructing the header, rejecting reports that
would exceed the buffer capacity.

Discovered by Atuin - Automated Vulnerability Discovery Engine.

Fixes: 75e16c8ce283 ("HID: hid-goodix: Add Goodix HID-over-SPI driver")
Cc: stable@vger.kernel.org
Signed-off-by: Tianchu Chen <flynnnchen@tencent.com>
Reviewed-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
drivers/hid/hid-goodix-spi.c

index 80c0288a3a38b0048c63aa48d9306c8e5ab3f6a6..288cb827e9d6d4b1690498904d8ea437683d2309 100644 (file)
@@ -520,6 +520,9 @@ static int goodix_hid_set_raw_report(struct hid_device *hid,
        memcpy(tmp_buf + tx_len, args, args_len);
        tx_len += args_len;
 
+       if (tx_len + len > sizeof(tmp_buf))
+               return -EINVAL;
+
        memcpy(tmp_buf + tx_len, buf, len);
        tx_len += len;