diff options
author | Max Gurtovoy <maxg@mellanox.com> | 2019-10-13 19:57:37 +0300 |
---|---|---|
committer | Keith Busch <kbusch@kernel.org> | 2019-10-15 16:47:28 +0300 |
commit | 5812d04c4c7455627d8722e04ab99a737cfe9713 (patch) | |
tree | 86951d6e239759fed63f3b25879563d7468f3ea1 /drivers/nvme/target/loop.c | |
parent | ac1c4e18858cb1da6abe1932a7ca001c37f62372 (diff) | |
download | linux-5812d04c4c7455627d8722e04ab99a737cfe9713.tar.xz |
nvmet-loop: fix possible leakage during error flow
During nvme_loop_queue_rq error flow, one must call nvme_cleanup_cmd since
it's symmetric to nvme_setup_cmd.
Signed-off-by: Max Gurtovoy <maxg@mellanox.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Keith Busch <kbusch@kernel.org>
Diffstat (limited to 'drivers/nvme/target/loop.c')
-rw-r--r-- | drivers/nvme/target/loop.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/nvme/target/loop.c b/drivers/nvme/target/loop.c index 748a39fca771..11f5aea97d1b 100644 --- a/drivers/nvme/target/loop.c +++ b/drivers/nvme/target/loop.c @@ -157,8 +157,10 @@ static blk_status_t nvme_loop_queue_rq(struct blk_mq_hw_ctx *hctx, iod->sg_table.sgl = iod->first_sgl; if (sg_alloc_table_chained(&iod->sg_table, blk_rq_nr_phys_segments(req), - iod->sg_table.sgl, SG_CHUNK_SIZE)) + iod->sg_table.sgl, SG_CHUNK_SIZE)) { + nvme_cleanup_cmd(req); return BLK_STS_RESOURCE; + } iod->req.sg = iod->sg_table.sgl; iod->req.sg_cnt = blk_rq_map_sg(req->q, req, iod->sg_table.sgl); |