diff mbox series

[v2,net] ice: Avoid crash from unnecessary IDA free

Message ID 20211004121525.6384-1-david.m.ertman@intel.com
State Accepted
Delegated to: Anthony Nguyen
Headers show
Series [v2,net] ice: Avoid crash from unnecessary IDA free | expand

Commit Message

Dave Ertman Oct. 4, 2021, 12:15 p.m. UTC
In the remove path, there is an attempt to free the aux_idx IDA whether
it was allocated or not.  This can potentially cause a crash when
unloading the driver on systems that do not initialize support for RDMA.
But, this free cannot be gated by the status bit for RDMA, since it is
allocated if the driver detects support for RDMA at probe time, but the
driver can enter into a state where RDMA is not supported after the IDA
has been allocated at probe time and this would lead to a memory leak.

Initialize aux_idx to an invalid value and check for a valid value when
unloading to determine if an IDA free is necessary.

Fixes: d25a0fc41c1f9 ("ice: Initialize RDMA support")
Reported-by: Jun Miao <jun.miao@windriver.com>
Signed-off-by: Dave Ertman <david.m.ertman@intel.com>
---
 drivers/net/ethernet/intel/ice/ice_main.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

Comments

Jesse Brandeburg Oct. 13, 2021, 11:15 p.m. UTC | #1
On 10/4/2021 5:15 AM, Dave Ertman wrote:
> In the remove path, there is an attempt to free the aux_idx IDA whether
> it was allocated or not.  This can potentially cause a crash when
> unloading the driver on systems that do not initialize support for RDMA.
> But, this free cannot be gated by the status bit for RDMA, since it is
> allocated if the driver detects support for RDMA at probe time, but the
> driver can enter into a state where RDMA is not supported after the IDA
> has been allocated at probe time and this would lead to a memory leak.
> 
> Initialize aux_idx to an invalid value and check for a valid value when
> unloading to determine if an IDA free is necessary.
> 
> Fixes: d25a0fc41c1f9 ("ice: Initialize RDMA support")
> Reported-by: Jun Miao <jun.miao@windriver.com>
> Signed-off-by: Dave Ertman <david.m.ertman@intel.com>

Please send upstream!
With this patch applied I can now rmmod my ice driver without a panic!

Tested-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
diff mbox series

Patch

diff --git a/drivers/net/ethernet/intel/ice/ice_main.c b/drivers/net/ethernet/intel/ice/ice_main.c
index 0d6c143f6653..94037881bfd8 100644
--- a/drivers/net/ethernet/intel/ice/ice_main.c
+++ b/drivers/net/ethernet/intel/ice/ice_main.c
@@ -4224,6 +4224,9 @@  ice_probe(struct pci_dev *pdev, const struct pci_device_id __always_unused *ent)
 	if (!pf)
 		return -ENOMEM;
 
+	/* initialize Auxiliary index to invalid value */
+	pf->aux_idx = -1;
+
 	/* set up for high or low DMA */
 	err = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64));
 	if (err)
@@ -4615,7 +4618,8 @@  static void ice_remove(struct pci_dev *pdev)
 
 	ice_aq_cancel_waiting_tasks(pf);
 	ice_unplug_aux_dev(pf);
-	ida_free(&ice_aux_ida, pf->aux_idx);
+	if (pf->aux_idx >= 0)
+		ida_free(&ice_aux_ida, pf->aux_idx);
 	set_bit(ICE_DOWN, pf->state);
 
 	mutex_destroy(&(&pf->hw)->fdir_fltr_lock);