Commit 06d4ef30 authored by Simon Horman's avatar Simon Horman Committed by Marc Kleine-Budde
Browse files

can: m_can: Release irq on error in m_can_open



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: eaacfeac ("can: m_can: Call the RAM init directly from m_can_chip_config")
Acked-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: default avatarSimon Horman <horms@kernel.org>
Link: https://lore.kernel.org/all/20240805-mcan-irq-v2-1-7154c0484819@kernel.org


Signed-off-by: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
parent 76fe372c
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -2052,7 +2052,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);
@@ -2061,6 +2061,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);