| From foo@baz Tue Nov 21 13:07:02 CET 2017 |
| From: Bjørn Mork <bjorn@mork.no> |
| Date: Wed, 15 Nov 2017 09:35:02 +0100 |
| Subject: net: cdc_ncm: GetNtbFormat endian fix |
| |
| From: Bjørn Mork <bjorn@mork.no> |
| |
| |
| [ Upstream commit 6314dab4b8fb8493d810e175cb340376052c69b6 ] |
| |
| The GetNtbFormat and SetNtbFormat requests operate on 16 bit little |
| endian values. We get away with ignoring this most of the time, because |
| we only care about USB_CDC_NCM_NTB16_FORMAT which is 0x0000. This |
| fails for USB_CDC_NCM_NTB32_FORMAT. |
| |
| Fix comparison between LE value from device and constant by converting |
| the constant to LE. |
| |
| Reported-by: Ben Hutchings <ben.hutchings@codethink.co.uk> |
| Fixes: 2b02c20ce0c2 ("cdc_ncm: Set NTB format again after altsetting switch for Huawei devices") |
| Cc: Enrico Mioso <mrkiko.rs@gmail.com> |
| Cc: Christian Panton <christian@panton.org> |
| Signed-off-by: Bjørn Mork <bjorn@mork.no> |
| Acked-By: Enrico Mioso <mrkiko.rs@gmail.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/usb/cdc_ncm.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/net/usb/cdc_ncm.c |
| +++ b/drivers/net/usb/cdc_ncm.c |
| @@ -771,7 +771,7 @@ int cdc_ncm_bind_common(struct usbnet *d |
| int err; |
| u8 iface_no; |
| struct usb_cdc_parsed_header hdr; |
| - u16 curr_ntb_format; |
| + __le16 curr_ntb_format; |
| |
| ctx = kzalloc(sizeof(*ctx), GFP_KERNEL); |
| if (!ctx) |
| @@ -889,7 +889,7 @@ int cdc_ncm_bind_common(struct usbnet *d |
| goto error2; |
| } |
| |
| - if (curr_ntb_format == USB_CDC_NCM_NTB32_FORMAT) { |
| + if (curr_ntb_format == cpu_to_le16(USB_CDC_NCM_NTB32_FORMAT)) { |
| dev_info(&intf->dev, "resetting NTB format to 16-bit"); |
| err = usbnet_write_cmd(dev, USB_CDC_SET_NTB_FORMAT, |
| USB_TYPE_CLASS | USB_DIR_OUT |