usb: storage: Fix overwritten in usb_stor_set_max_xfer_blk()
authorBin Meng <bmeng.cn@gmail.com>
Thu, 28 Sep 2017 04:50:07 +0000 (21:50 -0700)
committerMarek Vasut <marex@denx.de>
Sun, 1 Oct 2017 14:32:55 +0000 (16:32 +0200)
The stored 'blk' value is overwritten to 'size / 512' before it can
be used in usb_stor_set_max_xfer_blk(). This is not what we want.
In fact, when 'size' exceeds the upper limit (USHRT_MAX * 512), we
should simply assign 'size' to the upper limit.

Reported-by: Coverity (CID: 167250)
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
common/usb_storage.c

index a57570b73f3d0a2cafd7f6d4d9093dbc67d18140..a91b1c0d2f925eed06881d14ab85afe398eac423 100644 (file)
@@ -964,7 +964,7 @@ static void usb_stor_set_max_xfer_blk(struct usb_device *udev,
                blk = 20;
        } else {
                if (size > USHRT_MAX * 512)
-                       blk = USHRT_MAX;
+                       size = USHRT_MAX * 512;
                blk = size / 512;
        }
 #endif