* [PATCH 0/2] HID: Intel-thc-hid: Fix potential buffer overflow
@ 2026-09-22 2:46 Even Xu
2026-09-22 2:46 ` [PATCH 1/2] HID: Intel-thc-hid: Intel-quicki2c: Fix " Even Xu
` (2 more replies)
0 siblings, 3 replies; 5+ messages in thread
From: Even Xu @ 2026-09-22 2:46 UTC (permalink / raw)
To: bentiss, jikos; +Cc: srinivas.pandruvada, linux-input, linux-kernel, Even Xu
This patch set allocate enough space for both the payload and the
packet header for quicki2c and quickspi input and output buffers to
prevent a buffer overflow when the payload reaches its maximum size,
as their sizes are currently calculated from the payload length only.
Even Xu (2):
HID: Intel-thc-hid: Intel-quicki2c: Fix buffer overflow
HID: Intel-thc-hid: Intel-quickspi: Fix buffer overflow
drivers/hid/intel-thc-hid/intel-quicki2c/pci-quicki2c.c | 6 ++++--
drivers/hid/intel-thc-hid/intel-quickspi/pci-quickspi.c | 3 ++-
2 files changed, 6 insertions(+), 3 deletions(-)
--
2.43.0
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/2] HID: Intel-thc-hid: Intel-quicki2c: Fix buffer overflow
2026-09-22 2:46 [PATCH 0/2] HID: Intel-thc-hid: Fix potential buffer overflow Even Xu
@ 2026-09-22 2:46 ` Even Xu
2026-09-22 3:03 ` sashiko-bot
2026-09-22 2:46 ` [PATCH 2/2] HID: Intel-thc-hid: Intel-quickspi: " Even Xu
2026-09-23 16:48 ` [PATCH 0/2] HID: Intel-thc-hid: Fix potential " Jiri Kosina
2 siblings, 1 reply; 5+ messages in thread
From: Even Xu @ 2026-09-22 2:46 UTC (permalink / raw)
To: bentiss, jikos; +Cc: srinivas.pandruvada, linux-input, linux-kernel, Even Xu
The input and output buffers are used to store complete HID-over-I2C
packets, including their protocol headers. However, their sizes are
currently calculated from the payload length only.
Allocate enough space for both the payload and the packet header to
prevent a buffer overflow when the payload reaches its maximum size.
Signed-off-by: Even Xu <even.xu@intel.com>
---
drivers/hid/intel-thc-hid/intel-quicki2c/pci-quicki2c.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/hid/intel-thc-hid/intel-quicki2c/pci-quicki2c.c b/drivers/hid/intel-thc-hid/intel-quicki2c/pci-quicki2c.c
index 0d2ad7bc3648..2537288b5026 100644
--- a/drivers/hid/intel-thc-hid/intel-quicki2c/pci-quicki2c.c
+++ b/drivers/hid/intel-thc-hid/intel-quicki2c/pci-quicki2c.c
@@ -606,7 +606,8 @@ static int quicki2c_alloc_report_buf(struct quicki2c_device *qcdev)
*/
max_report_len = max(le16_to_cpu(qcdev->dev_desc.max_input_len), SZ_4K);
- qcdev->input_buf = devm_kzalloc(qcdev->dev, max_report_len, GFP_KERNEL);
+ qcdev->input_buf = devm_kzalloc(qcdev->dev,
+ HIDI2C_PACKET_LEN(max_report_len), GFP_KERNEL);
if (!qcdev->input_buf)
return -ENOMEM;
@@ -616,7 +617,8 @@ static int quicki2c_alloc_report_buf(struct quicki2c_device *qcdev)
max_report_len = max(le16_to_cpu(qcdev->dev_desc.max_output_len),
max_report_len);
- qcdev->report_buf = devm_kzalloc(qcdev->dev, max_report_len, GFP_KERNEL);
+ qcdev->report_buf = devm_kzalloc(qcdev->dev,
+ HIDI2C_PACKET_LEN(max_report_len), GFP_KERNEL);
if (!qcdev->report_buf)
return -ENOMEM;
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] HID: Intel-thc-hid: Intel-quickspi: Fix buffer overflow
2026-09-22 2:46 [PATCH 0/2] HID: Intel-thc-hid: Fix potential buffer overflow Even Xu
2026-09-22 2:46 ` [PATCH 1/2] HID: Intel-thc-hid: Intel-quicki2c: Fix " Even Xu
@ 2026-09-22 2:46 ` Even Xu
2026-09-23 16:48 ` [PATCH 0/2] HID: Intel-thc-hid: Fix potential " Jiri Kosina
2 siblings, 0 replies; 5+ messages in thread
From: Even Xu @ 2026-09-22 2:46 UTC (permalink / raw)
To: bentiss, jikos; +Cc: srinivas.pandruvada, linux-input, linux-kernel, Even Xu
The input buffers are used to store complete HID-over-SPI packets,
including their protocol headers. However, their sizes are
currently calculated from the payload length only.
Allocate enough space for both the payload and the packet header to
prevent a buffer overflow when the payload reaches its maximum size.
Signed-off-by: Even Xu <even.xu@intel.com>
---
drivers/hid/intel-thc-hid/intel-quickspi/pci-quickspi.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/hid/intel-thc-hid/intel-quickspi/pci-quickspi.c b/drivers/hid/intel-thc-hid/intel-quickspi/pci-quickspi.c
index 89226f5ce45e..ad676fde211b 100644
--- a/drivers/hid/intel-thc-hid/intel-quickspi/pci-quickspi.c
+++ b/drivers/hid/intel-thc-hid/intel-quickspi/pci-quickspi.c
@@ -552,7 +552,8 @@ static int quickspi_alloc_report_buf(struct quickspi_device *qsdev)
max_input_len = max(le16_to_cpu(qsdev->dev_desc.rep_desc_len),
le16_to_cpu(qsdev->dev_desc.max_input_len));
- qsdev->input_buf = devm_kzalloc(qsdev->dev, max_input_len, GFP_KERNEL);
+ qsdev->input_buf = devm_kzalloc(qsdev->dev,
+ HIDSPI_INPUT_BODY_SIZE(max_input_len), GFP_KERNEL);
if (!qsdev->input_buf)
return -ENOMEM;
--
2.43.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] HID: Intel-thc-hid: Intel-quicki2c: Fix buffer overflow
2026-09-22 2:46 ` [PATCH 1/2] HID: Intel-thc-hid: Intel-quicki2c: Fix " Even Xu
@ 2026-09-22 3:03 ` sashiko-bot
0 siblings, 0 replies; 5+ messages in thread
From: sashiko-bot @ 2026-09-22 3:03 UTC (permalink / raw)
To: Even Xu; +Cc: linux-input, dmitry.torokhov
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] hid: intel-quicki2c: incomplete buffer fix and stale report_len causes -EINVAL for large payloads
--
commit 3ae5fe57bf2559497c69a1a1f4feb9ea45f51690
Author: Even Xu <even.xu@intel.com>
HID: Intel-thc-hid: Intel-quicki2c: Fix buffer overflow
The patch modifies buffer allocations in the intel-quicki2c driver to
account for packet headers in addition to the payload length. This is
intended to prevent buffer overflows when the payload reaches its maximum
size.
> diff --git a/drivers/hid/intel-thc-hid/intel-quicki2c/pci-quicki2c.c b/drivers/hid/intel-thc-hid/intel-quicki2c/pci-quicki2c.c
> index 0d2ad7bc3648a..2537288b50261 100644
> --- a/drivers/hid/intel-thc-hid/intel-quicki2c/pci-quicki2c.c
> +++ b/drivers/hid/intel-thc-hid/intel-quicki2c/pci-quicki2c.c
> @@ -606,7 +606,8 @@ static int quicki2c_alloc_report_buf(struct quicki2c_device *qcdev)
> */
> max_report_len = max(le16_to_cpu(qcdev->dev_desc.max_input_len), SZ_4K);
>
> - qcdev->input_buf = devm_kzalloc(qcdev->dev, max_report_len, GFP_KERNEL);
> + qcdev->input_buf = devm_kzalloc(qcdev->dev,
> + HIDI2C_PACKET_LEN(max_report_len), GFP_KERNEL);
> if (!qcdev->input_buf)
> return -ENOMEM;
>
> @@ -616,7 +617,8 @@ static int quicki2c_alloc_report_buf(struct quicki2c_device *qcdev)
> max_report_len = max(le16_to_cpu(qcdev->dev_desc.max_output_len),
> max_report_len);
>
> - qcdev->report_buf = devm_kzalloc(qcdev->dev, max_report_len, GFP_KERNEL);
> + qcdev->report_buf = devm_kzalloc(qcdev->dev,
> + HIDI2C_PACKET_LEN(max_report_len), GFP_KERNEL);
[Severity: Medium]
Does HIDI2C_PACKET_LEN() add enough space for the headers? It appears to only
add 2 bytes, but output operations and SET_REPORT might require up to 9 bytes
of command headers (e.g., cmd_reg, cmd, data_reg, length).
Also, qcdev->report_len is not updated to match the new size, remaining as
max_report_len just below this allocation.
Will this cause maximum-sized payloads to be incorrectly rejected with -EINVAL?
In quicki2c_init_write_buf(), there is a bounds check:
if (buf_len > write_buf_len)
return -EINVAL;
This evaluates the total packet length (including headers) against the
unadjusted report_len (passed as write_buf_len), causing valid maximum-sized
payloads to be rejected.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260922024638.932865-1-even.xu@intel.com?part=1
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 0/2] HID: Intel-thc-hid: Fix potential buffer overflow
2026-09-22 2:46 [PATCH 0/2] HID: Intel-thc-hid: Fix potential buffer overflow Even Xu
2026-09-22 2:46 ` [PATCH 1/2] HID: Intel-thc-hid: Intel-quicki2c: Fix " Even Xu
2026-09-22 2:46 ` [PATCH 2/2] HID: Intel-thc-hid: Intel-quickspi: " Even Xu
@ 2026-09-23 16:48 ` Jiri Kosina
2 siblings, 0 replies; 5+ messages in thread
From: Jiri Kosina @ 2026-09-23 16:48 UTC (permalink / raw)
To: Even Xu; +Cc: bentiss, srinivas.pandruvada, linux-input, linux-kernel
On Tue, 22 Sep 2026, Even Xu wrote:
> This patch set allocate enough space for both the payload and the
> packet header for quicki2c and quickspi input and output buffers to
> prevent a buffer overflow when the payload reaches its maximum size,
> as their sizes are currently calculated from the payload length only.
>
> Even Xu (2):
> HID: Intel-thc-hid: Intel-quicki2c: Fix buffer overflow
> HID: Intel-thc-hid: Intel-quickspi: Fix buffer overflow
Applied to hid.git#for-7.3/upstream-fixes, thanks.
--
Jiri Kosina
SUSE Labs
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-09-23 16:48 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-22 2:46 [PATCH 0/2] HID: Intel-thc-hid: Fix potential buffer overflow Even Xu
2026-09-22 2:46 ` [PATCH 1/2] HID: Intel-thc-hid: Intel-quicki2c: Fix " Even Xu
2026-09-22 3:03 ` sashiko-bot
2026-09-22 2:46 ` [PATCH 2/2] HID: Intel-thc-hid: Intel-quickspi: " Even Xu
2026-09-23 16:48 ` [PATCH 0/2] HID: Intel-thc-hid: Fix potential " Jiri Kosina
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox