mirror of
https://github.com/torvalds/linux.git
synced 2024-12-05 10:32:35 +00:00
bnx2x: Fix memory leak
There exists an `allocation race' between the CNIC and bnx2x drivers, in which both drivers allocate the same t2 memory while disregarding a possible previous allocation. Additionally, due to the current order of memory releases, some of the ILT memory in the driver is not released correctly when unloading the driver. Signed-off-by: Yuval Mintz <yuvalmin@broadcom.com> Signed-off-by: Ariel Elior <ariele@broadcom.com> Signed-off-by: Eilon Greenstein <eilong@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
f8f4f61a5a
commit
2f7a312230
@ -2934,9 +2934,9 @@ int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode, bool keep_link)
|
||||
bnx2x_free_fp_mem_cnic(bp);
|
||||
|
||||
if (IS_PF(bp)) {
|
||||
bnx2x_free_mem(bp);
|
||||
if (CNIC_LOADED(bp))
|
||||
bnx2x_free_mem_cnic(bp);
|
||||
bnx2x_free_mem(bp);
|
||||
}
|
||||
bp->state = BNX2X_STATE_CLOSED;
|
||||
bp->cnic_loaded = false;
|
||||
|
@ -7786,7 +7786,7 @@ int bnx2x_alloc_mem_cnic(struct bnx2x *bp)
|
||||
sizeof(struct
|
||||
host_hc_status_block_e1x));
|
||||
|
||||
if (CONFIGURE_NIC_MODE(bp))
|
||||
if (CONFIGURE_NIC_MODE(bp) && !bp->t2)
|
||||
/* allocate searcher T2 table, as it wan't allocated before */
|
||||
BNX2X_PCI_ALLOC(bp->t2, &bp->t2_mapping, SRC_T2_SZ);
|
||||
|
||||
@ -7809,7 +7809,7 @@ int bnx2x_alloc_mem(struct bnx2x *bp)
|
||||
{
|
||||
int i, allocated, context_size;
|
||||
|
||||
if (!CONFIGURE_NIC_MODE(bp))
|
||||
if (!CONFIGURE_NIC_MODE(bp) && !bp->t2)
|
||||
/* allocate searcher T2 table */
|
||||
BNX2X_PCI_ALLOC(bp->t2, &bp->t2_mapping, SRC_T2_SZ);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user