lkml.org 
[lkml]   [2018]   [Nov]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.18 014/171] powerpc/mm: Dont report hugepage tables as memory leaks when using kmemleak
    Date
    4.18-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Christophe Leroy <christophe.leroy@c-s.fr>

    [ Upstream commit 803d690e68f0c5230183f1a42c7d50a41d16e380 ]

    When a process allocates a hugepage, the following leak is
    reported by kmemleak. This is a false positive which is
    due to the pointer to the table being stored in the PGD
    as physical memory address and not virtual memory pointer.

    unreferenced object 0xc30f8200 (size 512):
    comm "mmap", pid 374, jiffies 4872494 (age 627.630s)
    hex dump (first 32 bytes):
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
    backtrace:
    [<e32b68da>] huge_pte_alloc+0xdc/0x1f8
    [<9e0df1e1>] hugetlb_fault+0x560/0x8f8
    [<7938ec6c>] follow_hugetlb_page+0x14c/0x44c
    [<afbdb405>] __get_user_pages+0x1c4/0x3dc
    [<b8fd7cd9>] __mm_populate+0xac/0x140
    [<3215421e>] vm_mmap_pgoff+0xb4/0xb8
    [<c148db69>] ksys_mmap_pgoff+0xcc/0x1fc
    [<4fcd760f>] ret_from_syscall+0x0/0x38

    See commit a984506c542e2 ("powerpc/mm: Don't report PUDs as
    memory leaks when using kmemleak") for detailed explanation.

    To fix that, this patch tells kmemleak to ignore the allocated
    hugepage table.

    Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    arch/powerpc/mm/hugetlbpage.c | 3 +++
    1 file changed, 3 insertions(+)

    --- a/arch/powerpc/mm/hugetlbpage.c
    +++ b/arch/powerpc/mm/hugetlbpage.c
    @@ -19,6 +19,7 @@
    #include <linux/moduleparam.h>
    #include <linux/swap.h>
    #include <linux/swapops.h>
    +#include <linux/kmemleak.h>
    #include <asm/pgtable.h>
    #include <asm/pgalloc.h>
    #include <asm/tlb.h>
    @@ -112,6 +113,8 @@ static int __hugepte_alloc(struct mm_str
    for (i = i - 1 ; i >= 0; i--, hpdp--)
    *hpdp = __hugepd(0);
    kmem_cache_free(cachep, new);
    + } else {
    + kmemleak_ignore(new);
    }
    spin_unlock(ptl);
    return 0;

    \
     
     \ /
      Last update: 2018-11-19 18:55    [W:2.847 / U:0.700 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site