diff options
author | Mike Marciniszyn <mike.marciniszyn@intel.com> | 2013-07-03 13:50:28 -0400 |
---|---|---|
committer | Roland Dreier <roland@purestorage.com> | 2013-07-11 19:46:44 -0400 |
commit | 308c813b19cb676df7e5e70b5f014fa56e918677 (patch) | |
tree | 7bb6d1374a85233db10e4e30212710c4c814eefc /drivers/infiniband/hw/qib/qib_init.c | |
parent | 22baa407f9e67636a3fd740a552f8f5e06cf8db5 (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.c | 6 |
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 | /* |