public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ppdev: fix double-free of pp->pdev->name
@ 2016-10-30 15:44 Jann Horn
  2016-10-30 16:29 ` Andy Lutomirski
  2016-10-30 17:54 ` Sudip Mukherjee
  0 siblings, 2 replies; 6+ messages in thread
From: Jann Horn @ 2016-10-30 15:44 UTC (permalink / raw)
  To: Arnd Bergmann, Greg Kroah-Hartman, Sudip Mukherjee
  Cc: linux-kernel, linux-parport, Andy Lutomirski

free_pardevice() is called by parport_unregister_device() and already frees
pp->pdev->name, don't try to do it again.

This bug causes kernel crashes.

I found and verified this with KASAN and some added pr_emerg()s:

[   60.316568] pp_release: pp->pdev->name == ffff88039cb264c0
[   60.316692] free_pardevice: freeing par_dev->name at ffff88039cb264c0
[   60.316706] pp_release: kfree(ffff88039cb264c0)
[   60.316714] ==========================================================
[   60.316722] BUG: Double free or freeing an invalid pointer
[   60.316731] Unexpected shadow byte: 0xFB
[   60.316801] Object at ffff88039cb264c0, in cache kmalloc-32 size: 32
[   60.316813] Allocated:
[   60.316824] PID = 1695
[   60.316869] Freed:
[   60.316880] PID = 1695
[   60.316935] ==========================================================

CCing Andy Lutomirski because I think this is what broke vmapped stacks
for me - after applying this patch, vmapped stacks worked for me.
Previously, I got oopses (and lockups) caused by area->pages[0] being
0x400000000 in __vunmap(), with area->pages being allocated in the kmalloc
area.

Signed-off-by: Jann Horn <jann@thejh.net>
---
 drivers/char/ppdev.c | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/drivers/char/ppdev.c b/drivers/char/ppdev.c
index d23368874710..6af1ce04b3da 100644
--- a/drivers/char/ppdev.c
+++ b/drivers/char/ppdev.c
@@ -748,10 +748,7 @@ static int pp_release(struct inode *inode, struct file *file)
 	}
 
 	if (pp->pdev) {
-		const char *name = pp->pdev->name;
-
 		parport_unregister_device(pp->pdev);
-		kfree(name);
 		pp->pdev = NULL;
 		pr_debug(CHRDEV "%x: unregistered pardevice\n", minor);
 	}
-- 
2.1.4

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

end of thread, other threads:[~2016-10-30 22:12 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-10-30 15:44 [PATCH] ppdev: fix double-free of pp->pdev->name Jann Horn
2016-10-30 16:29 ` Andy Lutomirski
2016-10-30 16:47   ` Jann Horn
2016-10-30 17:54 ` Sudip Mukherjee
2016-10-30 18:00   ` Jann Horn
2016-10-30 22:12     ` Greg Kroah-Hartman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox