| From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Date: Fri, 7 Nov 2014 08:48:15 -0800 |
| Subject: USB: cdc-acm: check for valid interfaces |
| |
| commit 403dff4e2c94f275e24fd85f40b2732ffec268a1 upstream. |
| |
| We need to check that we have both a valid data and control inteface for both |
| types of headers (union and not union.) |
| |
| References: https://bugzilla.kernel.org/show_bug.cgi?id=83551 |
| Reported-by: Simon Schubert <2+kernel@0x2c.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| drivers/usb/class/cdc-acm.c | 9 +++++---- |
| 1 file changed, 5 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/usb/class/cdc-acm.c |
| +++ b/drivers/usb/class/cdc-acm.c |
| @@ -1011,10 +1011,11 @@ next_desc: |
| } else { |
| control_interface = usb_ifnum_to_if(usb_dev, union_header->bMasterInterface0); |
| data_interface = usb_ifnum_to_if(usb_dev, (data_interface_num = union_header->bSlaveInterface0)); |
| - if (!control_interface || !data_interface) { |
| - dev_dbg(&intf->dev, "no interfaces\n"); |
| - return -ENODEV; |
| - } |
| + } |
| + |
| + if (!control_interface || !data_interface) { |
| + dev_dbg(&intf->dev, "no interfaces\n"); |
| + return -ENODEV; |
| } |
| |
| if (data_interface_num != call_interface_num) |