FAILED: patch "[PATCH] epic100: fix use after free on rmmod" failed to apply to 4.19-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 8ee9d82cd0a45e7d050ade598c9f33032a0f2891 Mon Sep 17 00:00:00 2001
From: Tong Zhang <[email protected]>
Date: Sun, 26 Jun 2022 21:33:48 -0700
Subject: [PATCH] epic100: fix use after free on rmmod
epic_close() calls epic_rx() and uses dma buffer, but in epic_remove_one() we already freed the dma buffer. To fix this issue, reorder function calls like in the .probe function.
BUG: KASAN: use-after-free in epic_rx+0xa6/0x7e0 [epic100] Call Trace: epic_rx+0xa6/0x7e0 [epic100] epic_close+0xec/0x2f0 [epic100] unregister_netdev+0x18/0x20 epic_remove_one+0xaa/0xf0 [epic100]
Fixes 1da177e4c3f4 ("Linux-2.6.12-rc2")
Reported-by Yilun Wu <[email protected]>
Signed-off-by Tong Zhang <[email protected]>
Reviewed-by Francois Romieu <[email protected]>
Signed-off-by Jakub Kicinski <[email protected]>
drivers/net/ethernet/smsc/epic100.c +2 -2
@@ -1515,14 +1515,14 @@ static void epic_remove_one(struct pci_dev *pdev)struct net_device *dev =pci_get_drvdata (pdev);struct epic_private *ep =netdev_priv (dev); +unregister_netdev (dev);dma_free_coherent (&pdev->dev,TX_TOTAL_SIZE , ep->tx_ring, ep->tx_ring_dma);dma_free_coherent (&pdev->dev,RX_TOTAL_SIZE , ep->rx_ring, ep->rx_ring_dma); -unregister_netdev (dev);pci_iounmap (pdev, ep->ioaddr); -pci_release_regions (pdev);free_netdev (dev); +pci_release_regions (pdev);pci_disable_device (pdev);/* pci_power_off(pdev, -1); */ }