From 8798c6f9e02b084763b7948224bbca06f16a30fe Mon Sep 17 00:00:00 2001 From: "Liam R. Howlett" Date: Fri, 13 May 2022 10:13:22 -0400 Subject: [PATCH] mm/mmap: Fix potential leak on do_mas_align_munmap() There is a leak when the system is low on resources and fails to allocate enough memory to complete the munmap task. Fix this by adding the necessary free operations in the unwinding. Fixes: a760774e7b7b (mm: start tracking VMAs with maple tree) Signed-off-by: Liam R. Howlett --- mm/mmap.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mm/mmap.c b/mm/mmap.c index 546034e7e1f70..de264351ce88c 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -2454,7 +2454,7 @@ do_mas_align_munmap(struct ma_state *mas, struct vm_area_struct *vma, return -ENOMEM; if (mas_preallocate(&mas_detach, vma, GFP_KERNEL)) - return -ENOMEM; + goto detach_alloc_fail; mas->last = end - 1; /* If we need to split any vma, do it now to save pain later. */ @@ -2577,6 +2577,8 @@ do_mas_align_munmap(struct ma_state *mas, struct vm_area_struct *vma, map_count_exceeded: split_failed: userfaultfd_error: + mas_destroy(&mas_detach); +detach_alloc_fail: mas_destroy(mas); return error; } -- 2.50.1