From 26d1bb8087482204cc5c51f7720f7b15043e31ba Mon Sep 17 00:00:00 2001 From: Peter Xu Date: Mon, 22 Mar 2021 13:51:32 -0400 Subject: [PATCH] FROMLIST: userfaultfd/hugetlbfs: Fix minor fault page leak When uffd-minor enabled, we need to put the page cache before handling the userfault in hugetlb_no_page(), otherwise the page refcount got leaked. This can be reproduced by running userfaultfd selftest with hugetlb_shared mode, then cat /proc/meminfo. Cc: Axel Rasmussen Cc: Andrea Arcangeli Cc: Mike Kravetz Cc: Mike Rapoport Cc: Andrew Morton Fixes: f2bf15fb0969 ("userfaultfd: add minor fault registration mode") Signed-off-by: Peter Xu Reviewed-by: Mike Kravetz Reviewed-by: Axel Rasmussen Signed-off-by: Lokesh Gidra Link: https://lore.kernel.org/patchwork/patch/1400632/ Bug: 160737021 Bug: 169683130 Change-Id: Iac0ebd6738af8b6212c5a6303e4ee2f482bb5841 --- mm/hugetlb.c | 1 + 1 file changed, 1 insertion(+) diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 34a2c41810e2..dfea623d1375 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -4460,6 +4460,7 @@ static vm_fault_t hugetlb_no_page(struct mm_struct *mm, /* Check for page in userfault range. */ if (userfaultfd_minor(vma)) { unlock_page(page); + put_page(page); ret = hugetlb_handle_userfault(vma, mapping, idx, flags, haddr, VM_UFFD_MINOR);