Message ID | 20240805-mcan-irq-v2-1-7154c0484819@kernel.org (mailing list archive) |
---|---|
State | Awaiting Upstream |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [v2] can: m_can: Release irq on error in m_can_open | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Series ignored based on subject |
On 05.08.2024 15:01:58, Simon Horman wrote: > It appears that the irq requested in m_can_open() may be leaked > if an error subsequently occurs: if m_can_start() fails. > > Address this by calling free_irq in the unwind path for > such cases. > > Flagged by Smatch. > Compile tested only. > > Fixes: eaacfeaca7ad ("can: m_can: Call the RAM init directly from m_can_chip_config") > Acked-by: Marc Kleine-Budde <mkl@pengutronix.de> > Signed-off-by: Simon Horman <horms@kernel.org> Applied ti linux-can. Thanks, Marc
diff --git a/drivers/net/can/m_can/m_can.c b/drivers/net/can/m_can/m_can.c index 14b231c4d7ec..205a6cb4470f 100644 --- a/drivers/net/can/m_can/m_can.c +++ b/drivers/net/can/m_can/m_can.c @@ -2009,7 +2009,7 @@ static int m_can_open(struct net_device *dev) /* start the m_can controller */ err = m_can_start(dev); if (err) - goto exit_irq_fail; + goto exit_start_fail; if (!cdev->is_peripheral) napi_enable(&cdev->napi); @@ -2018,6 +2018,9 @@ static int m_can_open(struct net_device *dev) return 0; +exit_start_fail: + if (cdev->is_peripheral || dev->irq) + free_irq(dev->irq, dev); exit_irq_fail: if (cdev->is_peripheral) destroy_workqueue(cdev->tx_wq);