linux-can.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] can: peak_pci: Fix UAF in peak_pci_remove
@ 2021-10-14  6:28 Zheyu Ma
  2021-10-17 12:29 ` Marc Kleine-Budde
  0 siblings, 1 reply; 2+ messages in thread
From: Zheyu Ma @ 2021-10-14  6:28 UTC (permalink / raw)
  To: wg, mkl, davem, kuba; +Cc: linux-can, netdev, linux-kernel, Zheyu Ma

When remove the module peek_pci, referencing 'chan' again after
releasing 'dev' will cause UAF.

Fix this by releasing 'dev' later.

The following log reveals it:

[   35.961814 ] BUG: KASAN: use-after-free in peak_pci_remove+0x16f/0x270 [peak_pci]
[   35.963414 ] Read of size 8 at addr ffff888136998ee8 by task modprobe/5537
[   35.965513 ] Call Trace:
[   35.965718 ]  dump_stack_lvl+0xa8/0xd1
[   35.966028 ]  print_address_description+0x87/0x3b0
[   35.966420 ]  kasan_report+0x172/0x1c0
[   35.966725 ]  ? peak_pci_remove+0x16f/0x270 [peak_pci]
[   35.967137 ]  ? trace_irq_enable_rcuidle+0x10/0x170
[   35.967529 ]  ? peak_pci_remove+0x16f/0x270 [peak_pci]
[   35.967945 ]  __asan_report_load8_noabort+0x14/0x20
[   35.968346 ]  peak_pci_remove+0x16f/0x270 [peak_pci]
[   35.968752 ]  pci_device_remove+0xa9/0x250

Signed-off-by: Zheyu Ma <zheyuma97@gmail.com>
---
 drivers/net/can/sja1000/peak_pci.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/net/can/sja1000/peak_pci.c b/drivers/net/can/sja1000/peak_pci.c
index 6db90dc4bc9d..84f34020aafb 100644
--- a/drivers/net/can/sja1000/peak_pci.c
+++ b/drivers/net/can/sja1000/peak_pci.c
@@ -752,16 +752,15 @@ static void peak_pci_remove(struct pci_dev *pdev)
 		struct net_device *prev_dev = chan->prev_dev;
 
 		dev_info(&pdev->dev, "removing device %s\n", dev->name);
+		/* do that only for first channel */
+		if (!prev_dev && chan->pciec_card)
+			peak_pciec_remove(chan->pciec_card);
 		unregister_sja1000dev(dev);
 		free_sja1000dev(dev);
 		dev = prev_dev;
 
-		if (!dev) {
-			/* do that only for first channel */
-			if (chan->pciec_card)
-				peak_pciec_remove(chan->pciec_card);
+		if (!dev)
 			break;
-		}
 		priv = netdev_priv(dev);
 		chan = priv->priv;
 	}
-- 
2.17.6


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] can: peak_pci: Fix UAF in peak_pci_remove
  2021-10-14  6:28 [PATCH] can: peak_pci: Fix UAF in peak_pci_remove Zheyu Ma
@ 2021-10-17 12:29 ` Marc Kleine-Budde
  0 siblings, 0 replies; 2+ messages in thread
From: Marc Kleine-Budde @ 2021-10-17 12:29 UTC (permalink / raw)
  To: Zheyu Ma; +Cc: wg, davem, kuba, linux-can, netdev, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 1293 bytes --]

On 14.10.2021 06:28:33, Zheyu Ma wrote:
> When remove the module peek_pci, referencing 'chan' again after
> releasing 'dev' will cause UAF.
> 
> Fix this by releasing 'dev' later.
> 
> The following log reveals it:
> 
> [   35.961814 ] BUG: KASAN: use-after-free in peak_pci_remove+0x16f/0x270 [peak_pci]
> [   35.963414 ] Read of size 8 at addr ffff888136998ee8 by task modprobe/5537
> [   35.965513 ] Call Trace:
> [   35.965718 ]  dump_stack_lvl+0xa8/0xd1
> [   35.966028 ]  print_address_description+0x87/0x3b0
> [   35.966420 ]  kasan_report+0x172/0x1c0
> [   35.966725 ]  ? peak_pci_remove+0x16f/0x270 [peak_pci]
> [   35.967137 ]  ? trace_irq_enable_rcuidle+0x10/0x170
> [   35.967529 ]  ? peak_pci_remove+0x16f/0x270 [peak_pci]
> [   35.967945 ]  __asan_report_load8_noabort+0x14/0x20
> [   35.968346 ]  peak_pci_remove+0x16f/0x270 [peak_pci]
> [   35.968752 ]  pci_device_remove+0xa9/0x250
> 
> Signed-off-by: Zheyu Ma <zheyuma97@gmail.com>

Applied to linux-can/testing.

Thanks,
Marc

-- 
Pengutronix e.K.                 | Marc Kleine-Budde           |
Embedded Linux                   | https://www.pengutronix.de  |
Vertretung West/Dortmund         | Phone: +49-231-2826-924     |
Amtsgericht Hildesheim, HRA 2686 | Fax:   +49-5121-206917-5555 |

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2021-10-17 12:29 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-14  6:28 [PATCH] can: peak_pci: Fix UAF in peak_pci_remove Zheyu Ma
2021-10-17 12:29 ` Marc Kleine-Budde

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).