aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/irdma/pble.c
diff options
context:
space:
mode:
authorShiraz Saleem <shiraz.saleem@intel.com>2021-12-07 09:21:36 -0600
committerJason Gunthorpe <jgg@nvidia.com>2021-12-07 13:43:52 -0400
commit1e11a39a82e95ce86f849f40dda0d9c0498cebd9 (patch)
treed0ced435a66d347a53fb95f210093641a0164d48 /drivers/infiniband/hw/irdma/pble.c
parentIB/hfi1: Fix leak of rcvhdrtail_dummy_kvaddr (diff)
downloadlinux-dev-1e11a39a82e95ce86f849f40dda0d9c0498cebd9.tar.xz
linux-dev-1e11a39a82e95ce86f849f40dda0d9c0498cebd9.zip
RDMA/irdma: Fix a user-after-free in add_pble_prm
When irdma_hmc_sd_one fails, 'chunk' is freed while its still on the PBLE info list. Add the chunk entry to the PBLE info list only after successful setting of the SD in irdma_hmc_sd_one. Fixes: e8c4dbc2fcac ("RDMA/irdma: Add PBLE resource manager") Link: https://lore.kernel.org/r/20211207152135.2192-1-shiraz.saleem@intel.com Reported-by: Dan Carpenter <dan.carpenter@oracle.com> Signed-off-by: Shiraz Saleem <shiraz.saleem@intel.com> Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Diffstat (limited to '')
-rw-r--r--drivers/infiniband/hw/irdma/pble.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/infiniband/hw/irdma/pble.c b/drivers/infiniband/hw/irdma/pble.c
index aeeb1c310965..da032b952755 100644
--- a/drivers/infiniband/hw/irdma/pble.c
+++ b/drivers/infiniband/hw/irdma/pble.c
@@ -283,7 +283,6 @@ add_pble_prm(struct irdma_hmc_pble_rsrc *pble_rsrc)
"PBLE: next_fpm_addr = %llx chunk_size[%llu] = 0x%llx\n",
pble_rsrc->next_fpm_addr, chunk->size, chunk->size);
pble_rsrc->unallocated_pble -= (u32)(chunk->size >> 3);
- list_add(&chunk->list, &pble_rsrc->pinfo.clist);
sd_reg_val = (sd_entry_type == IRDMA_SD_TYPE_PAGED) ?
sd_entry->u.pd_table.pd_page_addr.pa :
sd_entry->u.bp.addr.pa;
@@ -295,6 +294,7 @@ add_pble_prm(struct irdma_hmc_pble_rsrc *pble_rsrc)
goto error;
}
+ list_add(&chunk->list, &pble_rsrc->pinfo.clist);
sd_entry->valid = true;
return 0;