Skip to content

Commit 2b88946

Browse files
committed
fixup! WIP: HID: transport: spi: add Apple SPI transport
HID: transport: spi: apple: verify payload size Signed-off-by: Janne Grunau <j@jannau.net>
1 parent 47958f9 commit 2b88946

1 file changed

Lines changed: 6 additions & 3 deletions

File tree

drivers/hid/spi-hid/spi-hid-apple-core.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -681,26 +681,29 @@ static void spihid_process_message(struct spihid_apple *spihid, u8 *data,
681681
struct device *dev = &spihid->spidev->dev;
682682
struct spihid_msg_hdr *hdr;
683683
bool handled = false;
684+
size_t payload_len;
684685
u8 *payload;
685686

686687
if (!spihid_verify_msg(spihid, data, length))
687688
return;
688689

689690
hdr = (struct spihid_msg_hdr *)data;
691+
payload_len = le16_to_cpu(hdr->length);
690692

691-
if (hdr->length == 0)
693+
if (payload_len == 0 ||
694+
(payload_len + sizeof(struct spihid_msg_hdr) + 2) > length)
692695
return;
693696

694697
payload = data + sizeof(struct spihid_msg_hdr);
695698

696699
switch (flags) {
697700
case SPIHID_READ_PACKET:
698701
handled = spihid_process_input_report(spihid, device, hdr,
699-
payload, le16_to_cpu(hdr->length));
702+
payload, payload_len);
700703
break;
701704
case SPIHID_WRITE_PACKET:
702705
handled = spihid_process_response(spihid, device, hdr, payload,
703-
le16_to_cpu(hdr->length));
706+
payload_len);
704707
break;
705708
default:
706709
break;

0 commit comments

Comments
 (0)