hugetlb: fix resv_map leak in error path
commit c50ac050 upstream. When called for anonymous (non-shared) mappings, hugetlb_reserve_pages() does a resv_map_alloc(). It depends on code in hugetlbfs's vm_ops->close() to release that allocation. However, in the mmap() failure path, we do a plain unmap_region() without the remove_vma() which actually calls vm_ops->close(). This is a decent fix. This leak could get reintroduced if new code (say, after hugetlb_reserve_pages() in hugetlbfs_file_mmap()) decides to return an error. But, I think it would have to unroll the reservation anyway. Christoph's test case: http://marc.info/?l=linux-mm&m=133728900729735Signed-off-by:Dave Hansen <dave@linux.vnet.ibm.com> [Christoph Lameter: I have rediffed the patch against 2.6.32 and 3.2.0.] Signed-off-by:
Ben Hutchings <ben@decadent.org.uk>
Showing
Please register or sign in to comment