nvme: Fix potential sign extension issue in nvme_blk_rw()
authorBin Meng <bmeng.cn@gmail.com>
Sat, 2 Sep 2017 15:15:36 +0000 (08:15 -0700)
committerTom Rini <trini@konsulko.com>
Sun, 3 Sep 2017 19:30:33 +0000 (15:30 -0400)
commit52a5690efb034c16e1a81b4124c55aa27e3e0138
treef393ee88eba909a156b608b3a21654759e94dbc6
parent37d46870b31724b71f593de3eda274e9ad8026d4
nvme: Fix potential sign extension issue in nvme_blk_rw()

"lbas" with type "u16" (16 bits, unsigned) is promoted in
"lbas << ns->lba_shift" to type "int" (32 bits, signed), then
sign-extended to type "unsigned long long" (64 bits, unsigned).
If "lbas << ns->lba_shift" is greater than 0x7FFFFFFF, the upper
bits of the result will all be 1.

Fix it by casting "lbas" to "u32".

Reported-by: Coverity (CID: 166730)
Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
drivers/nvme/nvme.c