summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Hildenbrand (Arm) <david@kernel.org>2026-10-15 18:07:16 +0200
committerAndrew Morton <akpm@linux-foundation.org>2026-10-24 01:55:49 -0700
commitcc078ca0b5b79b4a9e514b7f1b489f2afc83b195 (patch)
tree124ab524dbe1d33c48f7fc9f55a8098c81b443d5
parentf6605fc6b14bd5fc0fea90fc8226573adcec352b (diff)
mm/mremap: fix calling fixup_hugetlb_reservations() on the wrong VMA
In case we fail to move the page tables, for example, because we fail to allocate a page table, we actually keep the old VMA. Calling fixup_hugetlb_reservations() on the old VMA is wrong. Fix it by just calling it on the VMA that will be removed. The user-visible impact is that the VMA loses its reservations, meaning that the existing reservations get stranded (leaked) and new hugetlb folios that are getting allocated in the VMA cannot make use of the reservations, failing these allocations. Link: https://lore.kernel.org/20261015-urgent_fixes-v1-10-42796911043b@kernel.org Fixes: b714ccb02a76 ("mm/mremap: complete refactor of move_vma()") Signed-off-by: David Hildenbrand (Arm) <david@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Reviewed-by: Lorenzo Stoakes (ARM) <ljs@kernel.org> Acked-by: Muchun Song <muchun.song@linux.dev> Reviewed-by: Lance Yang <lance.yang@linux.dev> Cc: Liam R. Howlett <liam@infradead.org> Cc: Vlastimil Babka <vbabka@kernel.org> Cc: Jann Horn <jannh@google.com> Cc: Pedro Falcato <pfalcato@suse.de> Cc: Oscar Salvador <osalvador@suse.de> Cc: Miaohe Lin <linmiaohe@huawei.com> Cc: Naoya Horiguchi <nao.horiguchi@gmail.com> Cc: Adam Litke <agl@us.ibm.com> Cc: Mel Gorman <mgorman@techsingularity.net> Cc: Rik van Riel <riel@surriel.com> Cc: Peter Xu <peterx@redhat.com> Cc: Kiryl Shutsemau <kas@kernel.org> Cc: Mike Rapoport <rppt@kernel.org> Cc: Josef Bacik <josef@toxicpanda.com> Cc: <stable@vger.kernel.org>
-rw-r--r--mm/mremap.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/mm/mremap.c b/mm/mremap.c
index 444f37d7cd28..ace0c6a343b1 100644
--- a/mm/mremap.c
+++ b/mm/mremap.c
@@ -1345,7 +1345,7 @@ static int copy_vma_and_data(struct vma_remap_struct *vrm,
mremap_userfaultfd_prep(new_vma, vrm->uf);
}
- fixup_hugetlb_reservations(vma);
+ fixup_hugetlb_reservations(vrm->vma);
*new_vma_ptr = new_vma;
return err;