From: Souptick Joarder (HPE) Date: Wed, 13 Jul 2022 02:41:09 +0000 (+0530) Subject: mm/khugepaged: Avoid possible memory leak in failure path X-Git-Tag: remove_vma_adjust~48 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=94ff453a611d2a92097cda0c1a7a79f587fe762b;p=users%2Fjedix%2Flinux-maple.git mm/khugepaged: Avoid possible memory leak in failure path smatch warnings: mm/khugepaged.c:2409 madvise_collapse() warn: possible memory leak of 'cc' Avoiding possible memory leak. Link: https://lkml.kernel.org/r/20220713024109.62810-1-jrdr.linux@gmail.com Signed-off-by: Souptick Joarder (HPE) Reported-by: kernel test robot Reported-by: Dan Carpenter Cc: Zach O'Keefe Cc: Alex Shi Cc: Andrea Arcangeli Cc: Arnd Bergmann Cc: Axel Rasmussen Cc: Chris Kennelly Cc: Chris Zankel Cc: David Hildenbrand Cc: David Rientjes Cc: Helge Deller Cc: Hugh Dickins Cc: Ivan Kokshaysky Cc: James Bottomley Cc: Jens Axboe Cc: "Kirill A. Shutemov" Cc: Matthew Wilcox Cc: Matt Turner Cc: Max Filippov Cc: Miaohe Lin Cc: Michal Hocko Cc: Minchan Kim Cc: Pasha Tatashin Cc: Pavel Begunkov Cc: Peter Xu Cc: Rongwei Wang Cc: SeongJae Park Cc: Song Liu Cc: Thomas Bogendoerfer Cc: Vlastimil Babka Cc: Yang Shi Cc: Zi Yan Signed-off-by: Andrew Morton --- diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 76e450cf2465..3c8aa2db22be 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -2410,12 +2410,6 @@ int madvise_collapse(struct vm_area_struct *vma, struct vm_area_struct **prev, BUG_ON(vma->vm_start > start); BUG_ON(vma->vm_end < end); - cc = kmalloc(sizeof(*cc), GFP_KERNEL); - if (!cc) - return -ENOMEM; - cc->is_khugepaged = false; - cc->last_target_node = NUMA_NO_NODE; - *prev = vma; /* TODO: Support file/shmem */ @@ -2428,6 +2422,12 @@ int madvise_collapse(struct vm_area_struct *vma, struct vm_area_struct **prev, if (!hugepage_vma_check(vma, vma->vm_flags, false, false, false)) return -EINVAL; + cc = kmalloc(sizeof(*cc), GFP_KERNEL); + if (!cc) + return -ENOMEM; + cc->is_khugepaged = false; + cc->last_target_node = NUMA_NO_NODE; + mmgrab(mm); lru_add_drain_all();