mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-14 01:34:43 +08:00
can: m_can: Release irq on error in m_can_open
[ Upstream commit06d4ef3056
] 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:eaacfeaca7
("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> Link: https://lore.kernel.org/all/20240805-mcan-irq-v2-1-7154c0484819@kernel.org Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
10bfacbd5e
commit
508b52aa95
@ -1840,7 +1840,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;
|
||||
|
||||
can_led_event(dev, CAN_LED_EVENT_OPEN);
|
||||
|
||||
@ -1851,6 +1851,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);
|
||||
|
Loading…
Reference in New Issue
Block a user