Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1653d2f8 authored by Thomas Pugliese's avatar Thomas Pugliese Committed by Greg Kroah-Hartman
Browse files

usb: wusbcore: preserve endianness of cached descriptors



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: default avatarThomas Pugliese <thomas.pugliese@gmail.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 679ee475
Loading
Loading
Loading
Loading
+3 −7
Original line number Diff line number Diff line
@@ -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;
+1 −1
Original line number Diff line number Diff line
@@ -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)
+3 −3
Original line number Diff line number Diff line
@@ -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;