From 0db7efd754f65fe33d88cfe232e90a89482ee3d7 Mon Sep 17 00:00:00 2001 From: Ma Wupeng Date: Wed, 21 Jun 2023 10:10:16 +0800 Subject: [PATCH 1/3] mm: mem_reliable: Fix reliable page counter mismatch problem hulk inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/I77BDW CVE: NA -------------------------------- During copy_present_pte, rss counter is increased but the corresponding reliable page counter is not updated. This will lead to reliable page counter mismatch. Fix this by adding reliable page counter. Fixes: d81e9624de21 ("proc: Count reliable memory usage of reliable tasks") Signed-off-by: Ma Wupeng Reviewed-by: Kefeng Wang Reviewed-by: Nanyong Sun (cherry picked from commit e70b561e8d9d27fa16866f5ca75f4954ba24ab20) --- mm/memory.c | 1 + 1 file changed, 1 insertion(+) diff --git a/mm/memory.c b/mm/memory.c index 5941a4f4ea4b..5893c178251a 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -887,6 +887,7 @@ copy_present_pte(struct vm_area_struct *dst_vma, struct vm_area_struct *src_vma, get_page(page); page_dup_rmap(page, false); rss[mm_counter(page)]++; + reliable_page_counter(page, dst_vma->vm_mm, 1); } /* -- Gitee From 6a2500485455d3d41fb6a21848a030ac61e1f5b7 Mon Sep 17 00:00:00 2001 From: Ma Wupeng Date: Wed, 21 Jun 2023 10:10:17 +0800 Subject: [PATCH 2/3] mm: mem_reliable: Update reliable page counter to zero if underflows hulk inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/I77BDW CVE: NA -------------------------------- Since reliable page counter is used for debug purpose only, There is no real function problem by doing this. Signed-off-by: Ma Wupeng Reviewed-by: Kefeng Wang Reviewed-by: Nanyong Sun (cherry picked from commit a687d7a000efed25b0a5ca20c5710c3ecf768a44) --- include/linux/mem_reliable.h | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/include/linux/mem_reliable.h b/include/linux/mem_reliable.h index 79228a1b2f0b..dc1344b843b0 100644 --- a/include/linux/mem_reliable.h +++ b/include/linux/mem_reliable.h @@ -132,8 +132,19 @@ static inline bool reliable_allow_fb_enabled(void) static inline void reliable_page_counter(struct page *page, struct mm_struct *mm, int val) { - if (page_reliable(page)) - atomic_long_add(val, &mm->reliable_nr_page); + if (!page_reliable(page)) + return; + + atomic_long_add(val, &mm->reliable_nr_page); + + /* + * Update reliable page counter to zero if underflows. + * + * Since reliable page counter is used for debug purpose only, + * there is no real function problem by doing this. + */ + if (unlikely(atomic_long_read(&mm->reliable_nr_page) < 0)) + atomic_long_set(&mm->reliable_nr_page, 0); } static inline void reliable_clear_page_counter(struct mm_struct *mm) -- Gitee From c9fbd3940717ac877eb9128c5572a32eb2ef43f3 Mon Sep 17 00:00:00 2001 From: Ma Wupeng Date: Wed, 21 Jun 2023 10:10:18 +0800 Subject: [PATCH 3/3] efi: Disable mirror feature during crashkernel hulk inclusion category: cleanup bugzilla: https://gitee.com/openeuler/kernel/issues/I6WKXZ CVE: NA -------------------------------- If system have no mirrored memory or use crashkernel.high while kernelcore=mirror is enabled in cmdline, during crashkernel, there will be limited mirrored memory and this usually lead to OOM. To solve this problem, disable mirror feature during crashkernel. Signed-off-by: Ma Wupeng Reviewed-by: Kefeng Wang (cherry picked from commit 2bbd51a7ebc6c53770673e1fb395d09628078f26) --- drivers/firmware/efi/efi.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index c406de00883a..97a0916d6502 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -31,6 +31,7 @@ #include #include #include +#include #include @@ -446,6 +447,11 @@ void __init efi_find_mirror(void) if (!mirrored_kernelcore) return; + if (is_kdump_kernel()) { + mirrored_kernelcore = false; + return; + } + for_each_efi_memory_desc(md) { unsigned long long start = md->phys_addr; unsigned long long size = md->num_pages << EFI_PAGE_SHIFT; -- Gitee