| From 2ff6f8e03c910f3d630cddc15602b4204c4dd6fc Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 23 May 2021 21:12:10 -0700 |
| Subject: RDMA/srp: Fix a recently introduced memory leak |
| |
| From: Bart Van Assche <bvanassche@acm.org> |
| |
| [ Upstream commit 7ec2e27a3afff64c96bfe7a77685c33619db84be ] |
| |
| Only allocate a memory registration list if it will be used and if it will |
| be freed. |
| |
| Link: https://lore.kernel.org/r/20210524041211.9480-5-bvanassche@acm.org |
| Reviewed-by: Max Gurtovoy <maxg@mellanox.com> |
| Fixes: f273ad4f8d90 ("RDMA/srp: Remove support for FMR memory registration") |
| Signed-off-by: Bart Van Assche <bvanassche@acm.org> |
| Signed-off-by: Jason Gunthorpe <jgg@nvidia.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/infiniband/ulp/srp/ib_srp.c | 13 ++++++------- |
| 1 file changed, 6 insertions(+), 7 deletions(-) |
| |
| diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c |
| index a8f85993dab3..86d5c4c92b36 100644 |
| --- a/drivers/infiniband/ulp/srp/ib_srp.c |
| +++ b/drivers/infiniband/ulp/srp/ib_srp.c |
| @@ -998,7 +998,6 @@ static int srp_alloc_req_data(struct srp_rdma_ch *ch) |
| struct srp_device *srp_dev = target->srp_host->srp_dev; |
| struct ib_device *ibdev = srp_dev->dev; |
| struct srp_request *req; |
| - void *mr_list; |
| dma_addr_t dma_addr; |
| int i, ret = -ENOMEM; |
| |
| @@ -1009,12 +1008,12 @@ static int srp_alloc_req_data(struct srp_rdma_ch *ch) |
| |
| for (i = 0; i < target->req_ring_size; ++i) { |
| req = &ch->req_ring[i]; |
| - mr_list = kmalloc_array(target->mr_per_cmd, sizeof(void *), |
| - GFP_KERNEL); |
| - if (!mr_list) |
| - goto out; |
| - if (srp_dev->use_fast_reg) |
| - req->fr_list = mr_list; |
| + if (srp_dev->use_fast_reg) { |
| + req->fr_list = kmalloc_array(target->mr_per_cmd, |
| + sizeof(void *), GFP_KERNEL); |
| + if (!req->fr_list) |
| + goto out; |
| + } |
| req->indirect_desc = kmalloc(target->indirect_size, GFP_KERNEL); |
| if (!req->indirect_desc) |
| goto out; |
| -- |
| 2.30.2 |
| |