Patch "MIPS: pgalloc: fix memory leak caused by pgd_free()" has been added to the 5.15-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    MIPS: pgalloc: fix memory leak caused by pgd_free()

to the 5.15-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     mips-pgalloc-fix-memory-leak-caused-by-pgd_free.patch
and it can be found in the queue-5.15 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit 152c1fc7ef6dc290e8a386c3a215744f808a0359
Author: Yaliang Wang <Yaliang.Wang@xxxxxxxxxxxxx>
Date:   Thu Mar 10 19:31:16 2022 +0800

    MIPS: pgalloc: fix memory leak caused by pgd_free()
    
    [ Upstream commit 2bc5bab9a763d520937e4f3fe8df51c6a1eceb97 ]
    
    pgd page is freed by generic implementation pgd_free() since commit
    f9cb654cb550 ("asm-generic: pgalloc: provide generic pgd_free()"),
    however, there are scenarios that the system uses more than one page as
    the pgd table, in such cases the generic implementation pgd_free() won't
    be applicable anymore. For example, when PAGE_SIZE_4KB is enabled and
    MIPS_VA_BITS_48 is not enabled in a 64bit system, the macro "PGD_ORDER"
    will be set as "1", which will cause allocating two pages as the pgd
    table. Well, at the same time, the generic implementation pgd_free()
    just free one pgd page, which will result in the memory leak.
    
    The memory leak can be easily detected by executing shell command:
    "while true; do ls > /dev/null; grep MemFree /proc/meminfo; done"
    
    Fixes: f9cb654cb550 ("asm-generic: pgalloc: provide generic pgd_free()")
    Signed-off-by: Yaliang Wang <Yaliang.Wang@xxxxxxxxxxxxx>
    Signed-off-by: Thomas Bogendoerfer <tsbogend@xxxxxxxxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/arch/mips/include/asm/pgalloc.h b/arch/mips/include/asm/pgalloc.h
index c7925d0e9874..867e9c3db76e 100644
--- a/arch/mips/include/asm/pgalloc.h
+++ b/arch/mips/include/asm/pgalloc.h
@@ -15,6 +15,7 @@
 
 #define __HAVE_ARCH_PMD_ALLOC_ONE
 #define __HAVE_ARCH_PUD_ALLOC_ONE
+#define __HAVE_ARCH_PGD_FREE
 #include <asm-generic/pgalloc.h>
 
 static inline void pmd_populate_kernel(struct mm_struct *mm, pmd_t *pmd,
@@ -48,6 +49,11 @@ static inline void pud_populate(struct mm_struct *mm, pud_t *pud, pmd_t *pmd)
 extern void pgd_init(unsigned long page);
 extern pgd_t *pgd_alloc(struct mm_struct *mm);
 
+static inline void pgd_free(struct mm_struct *mm, pgd_t *pgd)
+{
+	free_pages((unsigned long)pgd, PGD_ORDER);
+}
+
 #define __pte_free_tlb(tlb,pte,address)			\
 do {							\
 	pgtable_pte_page_dtor(pte);			\



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux