Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

block: nvme-scsi: Catch kcalloc failure

res variable was initialized to -ENOMEM, but it's override by
nvme_trans_copy_from_user(). So current code returns 0 if kcalloc fails.
Fix it to return proper error code.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
Signed-off-by: Jens Axboe <axboe@fb.com>

authored by

Axel Lin and committed by
Jens Axboe
51ef72bd 71feb364

+4 -2
+4 -2
drivers/block/nvme-scsi.c
··· 2375 2375 struct scsi_unmap_parm_list *plist; 2376 2376 struct nvme_dsm_range *range; 2377 2377 struct nvme_command c; 2378 - int i, nvme_sc, res = -ENOMEM; 2378 + int i, nvme_sc, res; 2379 2379 u16 ndesc, list_len; 2380 2380 2381 2381 list_len = get_unaligned_be16(&cmd[7]); ··· 2397 2397 } 2398 2398 2399 2399 range = kcalloc(ndesc, sizeof(*range), GFP_KERNEL); 2400 - if (!range) 2400 + if (!range) { 2401 + res = -ENOMEM; 2401 2402 goto out; 2403 + } 2402 2404 2403 2405 for (i = 0; i < ndesc; i++) { 2404 2406 range[i].nlb = cpu_to_le32(be32_to_cpu(plist->desc[i].nlb));