Messages in this thread Patch in this message | | | From | Tobias Herzog <> | Subject | [PATCH v2 2/4] cdc-acm: fix possible invalid access when processing notification | Date | Sat, 18 Mar 2017 19:52:37 +0100 |
| |
Notifications may only be 8 bytes so long. Accessing the 9th and 10th byte of unimplemented/unknown notifications may be insecure. Also check the length of known notifications before accessing anything behind the 8th byte.
Signed-off-by: Tobias Herzog <t-herzog@gmx.de> --- drivers/usb/class/cdc-acm.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/drivers/usb/class/cdc-acm.c b/drivers/usb/class/cdc-acm.c index 74acca1..a7c8878 100644 --- a/drivers/usb/class/cdc-acm.c +++ b/drivers/usb/class/cdc-acm.c @@ -296,6 +296,12 @@ static void acm_process_notification(struct acm *acm, unsigned char *buf) break; case USB_CDC_NOTIFY_SERIAL_STATE: + if (le16_to_cpu(dr->wLength) != 2) { + dev_dbg(&acm->control->dev, + "%s - malformed serial state\n", __func__); + break; + } + newctrl = get_unaligned_le16(data); if (!acm->clocal && (acm->ctrlin & ~newctrl & ACM_CTRL_DCD)) { @@ -332,11 +338,10 @@ static void acm_process_notification(struct acm *acm, unsigned char *buf) default: dev_dbg(&acm->control->dev, - "%s - unknown notification %d received: index %d " - "len %d data0 %d data1 %d\n", + "%s - unknown notification %d received: index %d len %d\n", __func__, dr->bNotificationType, dr->wIndex, - dr->wLength, data[0], data[1]); + dr->wLength); } } -- 2.1.4
| |