From b1cd6a89f47d95afa6fd62f9fe029e9ab7bd421a Mon Sep 17 00:00:00 2001 From: Liu Zixian Date: Mon, 29 Aug 2022 14:57:45 +0800 Subject: [PATCH 1/2] hugetlb: fix perf file name euleros inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/I5NS6H CVE: NA ------------ We should call perf_event_mmap after vm_actual_file is set. If we run program with "perf record ./prog", kernel records mmap information (file name, address etc.) in perf_event_mmap which is called in do_mmap. Perf needs this to resolve symbol names. For hugetlb file map, vm_actual_file is set after do_mmap, so we need to call perf_event_mmap again to correct the recorded file name. Fixes:1af4fa6dcf83("hugetlb: support private file map") Signed-off-by: Liu Zixian --- mm/util.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/mm/util.c b/mm/util.c index 05efa0b50be7..809db832edd6 100644 --- a/mm/util.c +++ b/mm/util.c @@ -24,6 +24,9 @@ #include #include #include +#ifdef CONFIG_ENHANCED_HUGETLB_MMAP +#include +#endif #include #include @@ -516,6 +519,7 @@ static unsigned long finish_hugetlb_mmap(unsigned long addr, struct file *actual if (!vma) return -EINVAL; vma->vm_actual_file = get_file(actual_file); + perf_event_mmap(vma); return addr; } -- Gitee From 17d21439c4fb62f446a72f1f5964227fa8c1b5f8 Mon Sep 17 00:00:00 2001 From: Liu Zixian Date: Mon, 29 Aug 2022 15:10:32 +0800 Subject: [PATCH 2/2] hugetlb: fix hugepage leakage euleros inclusion category: bugfix bugzilla: https://gitee.com/openeuler/kernel/issues/I5OE36 CVE: NA ------------ Huge page should be released if read_actual_file failed. --- v2: change pr_info to pr_err_ratelimited Fixes:1af4fa6dcf83("hugetlb: support private file map") Signed-off-by: Liu Zixian --- mm/hugetlb.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 817ae73d40bd..0301e9bfe1ae 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -4858,8 +4858,12 @@ static vm_fault_t hugetlb_no_page(struct mm_struct *mm, size_t page_size = huge_page_size(h); ret = read_actual_file(page, vma, &off, page_size); - if (ret) + if (ret) { + put_page(page); + pr_err_ratelimited("enhanced hugetlb mmap: read file failed\n"); + ret = vmf_error(ret); goto out; + } } #endif __SetPageUptodate(page); -- Gitee