USB: storage: properly handle the endian issues of idProduct
authorfangxiaozhi <huananhu@huawei.com>
Thu, 7 Feb 2013 07:32:07 +0000 (15:32 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 8 Feb 2013 20:15:25 +0000 (12:15 -0800)
1. The idProduct is little endian, so make sure its value to be
compatible with the current CPU. Make no break on big endian processors.

Signed-off-by: fangxiaozhi <huananhu@huawei.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/storage/initializers.c

index 16b0bf0..7ab9046 100644 (file)
@@ -147,7 +147,7 @@ static int usb_stor_huawei_dongles_pid(struct us_data *us)
        int idProduct;
 
        idesc = &us->pusb_intf->cur_altsetting->desc;
-       idProduct = us->pusb_dev->descriptor.idProduct;
+       idProduct = le16_to_cpu(us->pusb_dev->descriptor.idProduct);
        /* The first port is CDROM,
         * means the dongle in the single port mode,
         * and a switch command is required to be sent. */
@@ -169,7 +169,7 @@ int usb_stor_huawei_init(struct us_data *us)
        int result = 0;
 
        if (usb_stor_huawei_dongles_pid(us)) {
-               if (us->pusb_dev->descriptor.idProduct >= 0x1446)
+               if (le16_to_cpu(us->pusb_dev->descriptor.idProduct) >= 0x1446)
                        result = usb_stor_huawei_scsi_init(us);
                else
                        result = usb_stor_huawei_feature_init(us);