Skip to content

Commit 649886a

Browse files
Kalesh APdavem330
authored andcommitted
be2net: protect eqo->affinity_mask from getting freed twice
There are paths in the driver such as an unrecoverable error (UE) detection followed by a driver unload wherein be_clear() is invoked twice. Individual data structures are reset so that they are not cleaned/freed twice. This patch does the same for eqo->affinity_mask. It is freed only if EQs haven't yet been destroyed. This fixes a possible crash when affinity_mask is freed twice. Signed-off-by: Kalesh AP <[email protected]> Signed-off-by: Sathya Perla <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 99b4430 commit 649886a

File tree

1 file changed

+10
-8
lines changed

1 file changed

+10
-8
lines changed

drivers/net/ethernet/emulex/benet/be_main.c

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2584,8 +2584,8 @@ static void be_evt_queues_destroy(struct be_adapter *adapter)
25842584
be_cmd_q_destroy(adapter, &eqo->q, QTYPE_EQ);
25852585
napi_hash_del(&eqo->napi);
25862586
netif_napi_del(&eqo->napi);
2587+
free_cpumask_var(eqo->affinity_mask);
25872588
}
2588-
free_cpumask_var(eqo->affinity_mask);
25892589
be_queue_free(adapter, &eqo->q);
25902590
}
25912591
}
@@ -2602,13 +2602,7 @@ static int be_evt_queues_create(struct be_adapter *adapter)
26022602

26032603
for_all_evt_queues(adapter, eqo, i) {
26042604
int numa_node = dev_to_node(&adapter->pdev->dev);
2605-
if (!zalloc_cpumask_var(&eqo->affinity_mask, GFP_KERNEL))
2606-
return -ENOMEM;
2607-
cpumask_set_cpu(cpumask_local_spread(i, numa_node),
2608-
eqo->affinity_mask);
2609-
netif_napi_add(adapter->netdev, &eqo->napi, be_poll,
2610-
BE_NAPI_WEIGHT);
2611-
napi_hash_add(&eqo->napi);
2605+
26122606
aic = &adapter->aic_obj[i];
26132607
eqo->adapter = adapter;
26142608
eqo->idx = i;
@@ -2624,6 +2618,14 @@ static int be_evt_queues_create(struct be_adapter *adapter)
26242618
rc = be_cmd_eq_create(adapter, eqo);
26252619
if (rc)
26262620
return rc;
2621+
2622+
if (!zalloc_cpumask_var(&eqo->affinity_mask, GFP_KERNEL))
2623+
return -ENOMEM;
2624+
cpumask_set_cpu(cpumask_local_spread(i, numa_node),
2625+
eqo->affinity_mask);
2626+
netif_napi_add(adapter->netdev, &eqo->napi, be_poll,
2627+
BE_NAPI_WEIGHT);
2628+
napi_hash_add(&eqo->napi);
26272629
}
26282630
return 0;
26292631
}

0 commit comments

Comments
 (0)