• Naoya Horiguchi's avatar
    mm: hugetlb: fix hugepage memory leak in mincore() · 4f16fc10
    Naoya Horiguchi authored
    Most callers of pmd_none_or_clear_bad() check whether the target page is
    in a hugepage or not, but mincore() and walk_page_range() do not check it.
     So if we use mincore() on a hugepage on x86 machine, the hugepage memory
    is leaked as shown below.  This patch fixes it by extending mincore()
    system call to support hugepages.
    
    Details
    =======
    My test program (leak_mincore) works as follows:
     - creat() and mmap() a file on hugetlbfs (file size is 200MB == 100 hugepages,)
     - read()/write() something on it,
     - call mincore() for first ten pages and printf() the values of *vec
     - munmap() and unlink() the file on hugetlbfs
    
    Without my patch
    ----------------
    $ cat /proc/meminfo| grep "HugePage"
    HugePages_Total:    1000
    HugePages_Free:     1000
    HugePages_Rsvd:        0
    HugePages_Surp:        0
    $ ./leak_mincore
    vec[0] 0
    vec[1] 0
    vec[2] 0
    vec[3] 0
    vec[4] 0
    vec[5] 0
    vec[6] 0
    vec[7] 0
    vec[8] 0
    vec[9] 0
    $ cat /proc/meminfo |grep "HugePage"
    HugePages_Total:    1000
    Hug...
    4f16fc10
mincore.c 6.62 KB