Re: [PATCH] ppdev: fix double-free of pp->pdev->name

Andy Lutomirski <[email protected]>
Newsgroups gmane.linux.kernel,gmane.linux.parport
Message-ID <CALCETrXmvCuuH8YW=ttzOAMs0A10NKjDFPvDDm6hP7UhrXrUdg@mail.gmail.com>
On Sun, Oct 30, 2016 at 8:44 AM, Jann Horn <[email protected]> wrote:
> 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.

That's an odd symptom.  I assume that what's happening is that the
pages array is being freed early by the extra kfree in here and then
getting corrupted.

--Andy
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.