• Li Zetao's avatar
    mm/mmap: fix memory leak in mmap_region() · cc674ab3
    Li Zetao authored
    There is a memory leak reported by kmemleak:
    
      unreferenced object 0xffff88817231ce40 (size 224):
        comm "mount.cifs", pid 19308, jiffies 4295917571 (age 405.880s)
        hex dump (first 32 bytes):
          00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
          60 c0 b2 00 81 88 ff ff 98 83 01 42 81 88 ff ff  `..........B....
        backtrace:
          [<ffffffff81936171>] __alloc_file+0x21/0x250
          [<ffffffff81937051>] alloc_empty_file+0x41/0xf0
          [<ffffffff81937159>] alloc_file+0x59/0x710
          [<ffffffff81937964>] alloc_file_pseudo+0x154/0x210
          [<ffffffff81741dbf>] __shmem_file_setup+0xff/0x2a0
          [<ffffffff817502cd>] shmem_zero_setup+0x8d/0x160
          [<ffffffff817cc1d5>] mmap_region+0x1075/0x19d0
          [<ffffffff817cd257>] do_mmap+0x727/0x1110
          [<ffffffff817518b2>] vm_mmap_pgoff+0x112/0x1e0
          [<ffffffff83adf955>] do_syscall_64+0x35/0x80
          [<ffffffff83c0006a>] entry_SYSCALL_64_after_hwframe+0x46/0xb0
    
    The root cause was traced to an error handing path in mmap_region() when
    arch_validate_flags() or mas_preallocate() fails.  In the shared anonymous
    mapping sence, vma will be setuped and mapped with a new shared anonymous
    file via shmem_zero_setup().  So in this case, the file resource needs to
    be released.
    
    Fix it by calling fput(vma->vm_file) and unmap_region() when
    arch_validate_flags() or mas_preallocate() returns an error in the shared
    anonymous mapping sence.
    
    Link: https://lkml.kernel.org/r/20221028073717.1179380-1-lizetao1@huawei.com
    Fixes: d4af56c5 ("mm: start tracking VMAs with maple tree")
    Fixes: c462ac28 ("mm: Introduce arch_validate_flags()")
    Signed-off-by: default avatarLi Zetao <lizetao1@huawei.com>
    Reviewed-by: default avatarLiam R. Howlett <Liam.Howlett@oracle.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    cc674ab3
mmap.c 101 KB