block: nvme-scsi: Catch kcalloc failure
Subsystems (2)
PATCH 1/1 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 at ingics.com>
--- drivers/block/nvme-scsi.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
drivers/block/nvme-scsi.c +4 -2
@@ -2377,7 +2377,7 @@ static int nvme_trans_unmap(struct nvme_ns *ns, struct sg_io_hdr *hdr,struct scsi_unmap_parm_list *plist;struct nvme_dsm_range *range;struct nvme_command c; -int i, nvme_sc, res = -ENOMEM ; +int i, nvme_sc, res;u16 ndesc, list_len; list_len =get_unaligned_be16 (&cmd[7 ]);
@@ -2399,8 +2399,10 @@ static int nvme_trans_unmap(struct nvme_ns *ns, struct sg_io_hdr *hdr, } range =kcalloc (ndesc,sizeof (*range),GFP_KERNEL ); -if (!range) +if (!range) { + res = -ENOMEM ; goto out; + }for (i =0 ; i < ndesc; i++) { range[i].nlb =cpu_to_le32 (be32_to_cpu (plist->desc[i].nlb));
Signature · 1 line
2.1.0
Quoted 3 lines · Axel Lin
res variable was initialized to
-ENOMEM, but it's override bynvme_trans_copy_from_user(). So current code returns 0 if kcalloc fails. Fix it to return proper error code.
Looks good to me, applied for 4.2.
Signature · 1 line
Jens Axboe