usb: wusbcore: preserve endianness of cached descriptors
authorThomas Pugliese <thomas.pugliese@gmail.com>
Mon, 7 Oct 2013 15:07:51 +0000 (10:07 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 19 Oct 2013 12:19:21 +0000 (05:19 -0700)
Do not overwrite the multi-byte fields of usb_wa_descriptor with their
cpu format values after reading the descriptor.  Leave the values as
__le16 and swap on use.  This is more consistent with other uses of USB
descriptors.

Signed-off-by: Thomas Pugliese <thomas.pugliese@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/hwa-hc.c
drivers/usb/wusbcore/wa-rpipe.c
include/linux/usb/wusb-wa.h

index e58b92491eb118dfd4efae8ee5ce4fcb54a0713c..e5fb3cfd57a98a8d2987009ce571bae705fce83f 100644 (file)
@@ -570,14 +570,10 @@ found:
                goto error;
        }
        wa->wa_descr = wa_descr = (struct usb_wa_descriptor *) hdr;
-       /* Make LE fields CPU order */
-       wa_descr->bcdWAVersion = le16_to_cpu(wa_descr->bcdWAVersion);
-       wa_descr->wNumRPipes = le16_to_cpu(wa_descr->wNumRPipes);
-       wa_descr->wRPipeMaxBlock = le16_to_cpu(wa_descr->wRPipeMaxBlock);
-       if (wa_descr->bcdWAVersion > 0x0100)
+       if (le16_to_cpu(wa_descr->bcdWAVersion) > 0x0100)
                dev_warn(dev, "Wire Adapter v%d.%d newer than groked v1.0\n",
-                        wa_descr->bcdWAVersion & 0xff00 >> 8,
-                        wa_descr->bcdWAVersion & 0x00ff);
+                        le16_to_cpu(wa_descr->bcdWAVersion) & 0xff00 >> 8,
+                        le16_to_cpu(wa_descr->bcdWAVersion) & 0x00ff);
        result = 0;
 error:
        return result;
index 50de1d2c7b725abeb0aeb9330340f358bc12292f..1ed068accb76d41d8b06fe95d9d9fa55d1fe5b19 100644 (file)
@@ -480,7 +480,7 @@ error:
  */
 int wa_rpipes_create(struct wahc *wa)
 {
-       wa->rpipes = wa->wa_descr->wNumRPipes;
+       wa->rpipes = le16_to_cpu(wa->wa_descr->wNumRPipes);
        wa->rpipe_bm = kzalloc(BITS_TO_LONGS(wa->rpipes)*sizeof(unsigned long),
                               GFP_KERNEL);
        if (wa->rpipe_bm == NULL)
index 9ae7e299bf774503faed05f85cc60c808b8b1d29..c1257130769b5465a04d7d162207613f378acfde 100644 (file)
@@ -279,11 +279,11 @@ struct wa_xfer_result {
 struct usb_wa_descriptor {
        u8      bLength;
        u8      bDescriptorType;
-       u16     bcdWAVersion;
+       __le16  bcdWAVersion;
        u8      bNumPorts;              /* don't use!! */
        u8      bmAttributes;           /* Reserved == 0 */
-       u16     wNumRPipes;
-       u16     wRPipeMaxBlock;
+       __le16  wNumRPipes;
+       __le16  wRPipeMaxBlock;
        u8      bRPipeBlockSize;
        u8      bPwrOn2PwrGood;
        u8      bNumMMCIEs;