From e1a287f23053ddcd5ed8ce674bb4ed8abcbbe441 Mon Sep 17 00:00:00 2001 From: yuhui317 Date: Wed, 22 Jun 2022 15:55:52 +0800 Subject: [PATCH] purgeable: using MAP_TYPE ohos inclusion category: feature issue: #I5DE2R CVE: NA ------------------------------------ purgeable memory mmap use MAP_TYPE Signed-off-by: Chengke Wang Signed-off-by: yuhui317 --- include/linux/mman.h | 4 ---- include/uapi/asm-generic/mman-common.h | 2 -- include/uapi/linux/mman.h | 2 ++ mm/mmap.c | 16 ++++++++++++---- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/include/linux/mman.h b/include/linux/mman.h index 946641c59135..629cefc4ecba 100644 --- a/include/linux/mman.h +++ b/include/linux/mman.h @@ -154,10 +154,6 @@ calc_vm_flag_bits(unsigned long flags) _calc_vm_trans(flags, MAP_DENYWRITE, VM_DENYWRITE ) | _calc_vm_trans(flags, MAP_LOCKED, VM_LOCKED ) | _calc_vm_trans(flags, MAP_SYNC, VM_SYNC ) | -#ifdef CONFIG_MEM_PURGEABLE - _calc_vm_trans(flags, MAP_PURGEABLE, VM_PURGEABLE ) | - _calc_vm_trans(flags, MAP_USEREXPTE, VM_USEREXPTE ) | -#endif arch_calc_vm_flag_bits(flags); } diff --git a/include/uapi/asm-generic/mman-common.h b/include/uapi/asm-generic/mman-common.h index 8003a595a007..f94f65d429be 100644 --- a/include/uapi/asm-generic/mman-common.h +++ b/include/uapi/asm-generic/mman-common.h @@ -21,8 +21,6 @@ #define MAP_TYPE 0x0f /* Mask for type of mapping */ #define MAP_FIXED 0x10 /* Interpret addr exactly */ #define MAP_ANONYMOUS 0x20 /* don't use a file */ -#define MAP_PURGEABLE 0x40 -#define MAP_USEREXPTE 0x80 /* 0x0100 - 0x4000 flags are defined in asm-generic/mman.h */ #define MAP_POPULATE 0x008000 /* populate (prefault) pagetables */ diff --git a/include/uapi/linux/mman.h b/include/uapi/linux/mman.h index f55bc680b5b0..c28942bcd4e3 100644 --- a/include/uapi/linux/mman.h +++ b/include/uapi/linux/mman.h @@ -16,6 +16,8 @@ #define MAP_SHARED 0x01 /* Share changes */ #define MAP_PRIVATE 0x02 /* Changes are private */ #define MAP_SHARED_VALIDATE 0x03 /* share + validate extension flags */ +#define MAP_PURGEABLE 0x04 /* purgeable memory */ +#define MAP_USEREXPTE 0x08 /* userspace extension page table */ /* * Huge page size encoding when MAP_HUGETLB is specified, and a huge page diff --git a/mm/mmap.c b/mm/mmap.c index b134946984a9..76e95375ed02 100644 --- a/mm/mmap.c +++ b/mm/mmap.c @@ -1559,17 +1559,25 @@ unsigned long do_mmap(struct file *file, unsigned long addr, /* * Ignore pgoff. */ - if (!(flags & MAP_USEREXPTE)) - pgoff = 0; + pgoff = 0; vm_flags |= VM_SHARED | VM_MAYSHARE; break; case MAP_PRIVATE: /* * Set pgoff according to addr for anon_vma. */ - if (!(flags & MAP_USEREXPTE)) - pgoff = addr >> PAGE_SHIFT; + pgoff = addr >> PAGE_SHIFT; break; +#ifdef CONFIG_MEM_PURGEABLE + case MAP_PURGEABLE: + vm_flags |= VM_PURGEABLE; + pr_info("vm_flags purgeable = %lx.\m", VM_PURGEABLE); + break; + case MAP_USEREXPTE: + vm_flags |= VM_USEREXPTE; + pr_info("vm_flags useredpte = %lx.\m", VM_USEREXPTE); + break; +#endif default: return -EINVAL; } -- Gitee