mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
net: stmmac: unwind the WoL IRQ after a safety IRQ request failure
The safety IRQ is requested after the MAC and optional WoL IRQs. If its request fails, stmmac_free_irq() frees the unregistered safety IRQ and leaks the WoL handler. This can warn about an already-free IRQ and make the next open fail. Move the safety and WoL cleanup labels into reverse acquisition order. This was found by code inspection while working on the stmmac MTU/resume recovery series. Injecting a safety IRQ request failure in QEMU with mocked MAC/DMA hardware reproduced the "Trying to free already-free IRQ" warning and leaked WoL handler. The failure has not been observed without fault injection. Signed-off-by: James Hilliard <james.hilliard1@gmail.com> Reviewed-by: Nicolai Buchwitz <nb@tipi-net.de> Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com> Link: https://patch.msgid.link/20261013-stmmac-irq-unwind-v3-1-fff4e2db805a@gmail.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
This commit is contained in:
parent
98c2ad4f5d
commit
ecb8b18051
|
|
@ -3821,13 +3821,13 @@ static void stmmac_free_irq(struct net_device *dev,
|
|||
free_irq(msi->sfty_ce_irq, dev);
|
||||
fallthrough;
|
||||
case REQ_IRQ_ERR_SFTY_CE:
|
||||
if (priv->wol_irq > 0 && priv->wol_irq != dev->irq)
|
||||
free_irq(priv->wol_irq, dev);
|
||||
fallthrough;
|
||||
case REQ_IRQ_ERR_SFTY:
|
||||
if (priv->sfty_irq > 0 && priv->sfty_irq != dev->irq)
|
||||
free_irq(priv->sfty_irq, dev);
|
||||
fallthrough;
|
||||
case REQ_IRQ_ERR_SFTY:
|
||||
if (priv->wol_irq > 0 && priv->wol_irq != dev->irq)
|
||||
free_irq(priv->wol_irq, dev);
|
||||
fallthrough;
|
||||
case REQ_IRQ_ERR_WOL:
|
||||
free_irq(dev->irq, dev);
|
||||
fallthrough;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user