lkml.org 
[lkml]   [2019]   [Oct]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.4 33/41] parisc: Fix vmap memory leak in ioremap()/iounmap()
    Date
    From: Helge Deller <deller@gmx.de>

    commit 513f7f747e1cba81f28a436911fba0b485878ebd upstream.

    Sven noticed that calling ioremap() and iounmap() multiple times leads
    to a vmap memory leak:
    vmap allocation for size 4198400 failed:
    use vmalloc=<size> to increase size

    It seems we missed calling vunmap() in iounmap().

    Signed-off-by: Helge Deller <deller@gmx.de>
    Noticed-by: Sven Schnelle <svens@stackframe.org>
    Cc: <stable@vger.kernel.org> # v3.16+
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/parisc/mm/ioremap.c | 12 +++++++-----
    1 file changed, 7 insertions(+), 5 deletions(-)

    --- a/arch/parisc/mm/ioremap.c
    +++ b/arch/parisc/mm/ioremap.c
    @@ -2,7 +2,7 @@
    * arch/parisc/mm/ioremap.c
    *
    * (C) Copyright 1995 1996 Linus Torvalds
    - * (C) Copyright 2001-2006 Helge Deller <deller@gmx.de>
    + * (C) Copyright 2001-2019 Helge Deller <deller@gmx.de>
    * (C) Copyright 2005 Kyle McMartin <kyle@parisc-linux.org>
    */

    @@ -83,7 +83,7 @@ void __iomem * __ioremap(unsigned long p
    addr = (void __iomem *) area->addr;
    if (ioremap_page_range((unsigned long)addr, (unsigned long)addr + size,
    phys_addr, pgprot)) {
    - vfree(addr);
    + vunmap(addr);
    return NULL;
    }

    @@ -91,9 +91,11 @@ void __iomem * __ioremap(unsigned long p
    }
    EXPORT_SYMBOL(__ioremap);

    -void iounmap(const volatile void __iomem *addr)
    +void iounmap(const volatile void __iomem *io_addr)
    {
    - if (addr > high_memory)
    - return vfree((void *) (PAGE_MASK & (unsigned long __force) addr));
    + unsigned long addr = (unsigned long)io_addr & PAGE_MASK;
    +
    + if (is_vmalloc_addr((void *)addr))
    + vunmap((void *)addr);
    }
    EXPORT_SYMBOL(iounmap);

    \
     
     \ /
      Last update: 2019-10-27 22:05    [W:4.156 / U:0.264 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site