aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw/qib/qib_init.c
diff options
context:
space:
mode:
authorMike Marciniszyn <mike.marciniszyn@intel.com>2013-07-03 13:50:28 -0400
committerRoland Dreier <roland@purestorage.com>2013-07-11 19:46:44 -0400
commit308c813b19cb676df7e5e70b5f014fa56e918677 (patch)
tree7bb6d1374a85233db10e4e30212710c4c814eefc /drivers/infiniband/hw/qib/qib_init.c
parent22baa407f9e67636a3fd740a552f8f5e06cf8db5 (diff)
IB/qib: Fix module-level leak
The vzalloc()'ed field physshadow is leaked on module unload. This patch adds vfree after the sibling page shadow is freed. Reported-by: Dean Luick <dean.luick@intel.com> Reviewed-by: Dean Luick <dean.luick@intel.com> Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
Diffstat (limited to 'drivers/infiniband/hw/qib/qib_init.c')
-rw-r--r--drivers/infiniband/hw/qib/qib_init.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/infiniband/hw/qib/qib_init.c b/drivers/infiniband/hw/qib/qib_init.c
index fdae42973056..36e048e0e1d9 100644
--- a/drivers/infiniband/hw/qib/qib_init.c
+++ b/drivers/infiniband/hw/qib/qib_init.c
@@ -1350,7 +1350,7 @@ static void cleanup_device_data(struct qib_devdata *dd)
1350 if (dd->pageshadow) { 1350 if (dd->pageshadow) {
1351 struct page **tmpp = dd->pageshadow; 1351 struct page **tmpp = dd->pageshadow;
1352 dma_addr_t *tmpd = dd->physshadow; 1352 dma_addr_t *tmpd = dd->physshadow;
1353 int i, cnt = 0; 1353 int i;
1354 1354
1355 for (ctxt = 0; ctxt < dd->cfgctxts; ctxt++) { 1355 for (ctxt = 0; ctxt < dd->cfgctxts; ctxt++) {
1356 int ctxt_tidbase = ctxt * dd->rcvtidcnt; 1356 int ctxt_tidbase = ctxt * dd->rcvtidcnt;
@@ -1363,13 +1363,13 @@ static void cleanup_device_data(struct qib_devdata *dd)
1363 PAGE_SIZE, PCI_DMA_FROMDEVICE); 1363 PAGE_SIZE, PCI_DMA_FROMDEVICE);
1364 qib_release_user_pages(&tmpp[i], 1); 1364 qib_release_user_pages(&tmpp[i], 1);
1365 tmpp[i] = NULL; 1365 tmpp[i] = NULL;
1366 cnt++;
1367 } 1366 }
1368 } 1367 }
1369 1368
1370 tmpp = dd->pageshadow;
1371 dd->pageshadow = NULL; 1369 dd->pageshadow = NULL;
1372 vfree(tmpp); 1370 vfree(tmpp);
1371 dd->physshadow = NULL;
1372 vfree(tmpd);
1373 } 1373 }
1374 1374
1375 /* 1375 /*