mirror of
https://github.com/Divested-Mobile/DivestOS-Build.git
synced 2024-12-12 01:14:22 -05:00
38 lines
1.4 KiB
Diff
38 lines
1.4 KiB
Diff
From 2e1c42391ff2556387b3cb6308b24f6f65619feb Mon Sep 17 00:00:00 2001
|
|
From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
Date: Thu, 21 Sep 2017 16:58:48 +0200
|
|
Subject: [PATCH] USB: core: harden cdc_parse_cdc_header
|
|
|
|
Andrey Konovalov reported a possible out-of-bounds problem for the
|
|
cdc_parse_cdc_header function. He writes:
|
|
It looks like cdc_parse_cdc_header() doesn't validate buflen
|
|
before accessing buffer[1], buffer[2] and so on. The only check
|
|
present is while (buflen > 0).
|
|
|
|
So fix this issue up by properly validating the buffer length matches
|
|
what the descriptor says it is.
|
|
|
|
Reported-by: Andrey Konovalov <andreyknvl@google.com>
|
|
Tested-by: Andrey Konovalov <andreyknvl@google.com>
|
|
Cc: stable <stable@vger.kernel.org>
|
|
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
---
|
|
drivers/usb/core/message.c | 4 ++++
|
|
1 file changed, 4 insertions(+)
|
|
|
|
diff --git a/drivers/usb/core/message.c b/drivers/usb/core/message.c
|
|
index 4c38ea41ae969..371a07d874a37 100644
|
|
--- a/drivers/usb/core/message.c
|
|
+++ b/drivers/usb/core/message.c
|
|
@@ -2069,6 +2069,10 @@ int cdc_parse_cdc_header(struct usb_cdc_parsed_header *hdr,
|
|
elength = 1;
|
|
goto next_desc;
|
|
}
|
|
+ if ((buflen < elength) || (elength < 3)) {
|
|
+ dev_err(&intf->dev, "invalid descriptor buffer length\n");
|
|
+ break;
|
|
+ }
|
|
if (buffer[1] != USB_DT_CS_INTERFACE) {
|
|
dev_err(&intf->dev, "skipping garbage\n");
|
|
goto next_desc;
|