Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mm/vma: define a default value for VM_DATA_DEFAULT_FLAGS

There are many platforms with exact same value for VM_DATA_DEFAULT_FLAGS
This creates a default value for VM_DATA_DEFAULT_FLAGS in line with the
existing VM_STACK_DEFAULT_FLAGS. While here, also define some more
macros with standard VMA access flag combinations that are used
frequently across many platforms. Apart from simplification, this
reduces code duplication as well.

Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Reviewed-by: Vlastimil Babka <vbabka@suse.cz>
Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Richard Henderson <rth@twiddle.net>
Cc: Vineet Gupta <vgupta@synopsys.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Mark Salter <msalter@redhat.com>
Cc: Guo Ren <guoren@kernel.org>
Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
Cc: Brian Cain <bcain@codeaurora.org>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Michal Simek <monstr@monstr.eu>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Paul Burton <paulburton@kernel.org>
Cc: Nick Hu <nickhu@andestech.com>
Cc: Ley Foon Tan <ley.foon.tan@intel.com>
Cc: Jonas Bonn <jonas@southpole.se>
Cc: "James E.J. Bottomley" <James.Bottomley@HansenPartnership.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Paul Walmsley <paul.walmsley@sifive.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Rich Felker <dalias@libc.org>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Guan Xuetao <gxt@pku.edu.cn>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Jeff Dike <jdike@addtoit.com>
Cc: Chris Zankel <chris@zankel.net>
Link: http://lkml.kernel.org/r/1583391014-8170-2-git-send-email-anshuman.khandual@arm.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Anshuman Khandual and committed by
Linus Torvalds
c62da0c3 8cd3984d

+31 -89
-3
arch/alpha/include/asm/page.h
··· 90 90 #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) 91 91 #endif /* CONFIG_DISCONTIGMEM */ 92 92 93 - #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ 94 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 95 - 96 93 #include <asm-generic/memory_model.h> 97 94 #include <asm-generic/getorder.h> 98 95
+1 -1
arch/arc/include/asm/page.h
··· 102 102 #define virt_addr_valid(kaddr) pfn_valid(virt_to_pfn(kaddr)) 103 103 104 104 /* Default Permissions for stack/heaps pages (Non Executable) */ 105 - #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 105 + #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_NON_EXEC 106 106 107 107 #define WANT_PAGE_VIRTUAL 1 108 108
+1 -3
arch/arm/include/asm/page.h
··· 161 161 162 162 #endif /* !__ASSEMBLY__ */ 163 163 164 - #define VM_DATA_DEFAULT_FLAGS \ 165 - (((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0) | \ 166 - VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 164 + #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC 167 165 168 166 #include <asm-generic/getorder.h> 169 167
+1 -3
arch/arm64/include/asm/page.h
··· 36 36 37 37 #endif /* !__ASSEMBLY__ */ 38 38 39 - #define VM_DATA_DEFAULT_FLAGS \ 40 - (((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0) | \ 41 - VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 39 + #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC 42 40 43 41 #include <asm-generic/getorder.h> 44 42
+1 -4
arch/c6x/include/asm/page.h
··· 2 2 #ifndef _ASM_C6X_PAGE_H 3 3 #define _ASM_C6X_PAGE_H 4 4 5 - #define VM_DATA_DEFAULT_FLAGS \ 6 - (VM_READ | VM_WRITE | \ 7 - ((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0) | \ 8 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 5 + #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC 9 6 10 7 #include <asm-generic/page.h> 11 8
-3
arch/csky/include/asm/page.h
··· 85 85 PHYS_OFFSET_OFFSET) 86 86 #define virt_to_page(x) (mem_map + MAP_NR(x)) 87 87 88 - #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ 89 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 90 - 91 88 #define pfn_to_kaddr(x) __va(PFN_PHYS(x)) 92 89 93 90 #include <asm-generic/memory_model.h>
-2
arch/h8300/include/asm/page.h
··· 6 6 #include <linux/types.h> 7 7 8 8 #define MAP_NR(addr) (((uintptr_t)(addr)-PAGE_OFFSET) >> PAGE_SHIFT) 9 - #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ 10 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 11 9 12 10 #ifndef __ASSEMBLY__ 13 11 extern unsigned long rom_length;
+1 -2
arch/hexagon/include/asm/page.h
··· 93 93 #define virt_to_page(kaddr) pfn_to_page(PFN_DOWN(__pa(kaddr))) 94 94 95 95 /* Default vm area behavior is non-executable. */ 96 - #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | \ 97 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 96 + #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_NON_EXEC 98 97 99 98 #define pfn_valid(pfn) ((pfn) < max_mapnr) 100 99 #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT)
+1 -4
arch/ia64/include/asm/page.h
··· 218 218 219 219 #define PAGE_OFFSET RGN_BASE(RGN_KERNEL) 220 220 221 - #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | \ 222 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC | \ 223 - (((current->personality & READ_IMPLIES_EXEC) != 0) \ 224 - ? VM_EXEC : 0)) 221 + #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC 225 222 226 223 #define GATE_ADDR RGN_BASE(RGN_GATE) 227 224
-3
arch/m68k/include/asm/page.h
··· 65 65 #define __phys_to_pfn(paddr) ((unsigned long)((paddr) >> PAGE_SHIFT)) 66 66 #define __pfn_to_phys(pfn) PFN_PHYS(pfn) 67 67 68 - #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ 69 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 70 - 71 68 #include <asm-generic/getorder.h> 72 69 73 70 #endif /* _M68K_PAGE_H */
-2
arch/microblaze/include/asm/page.h
··· 194 194 195 195 #ifdef CONFIG_MMU 196 196 197 - #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ 198 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 199 197 #endif /* CONFIG_MMU */ 200 198 201 199 #endif /* __KERNEL__ */
+1 -4
arch/mips/include/asm/page.h
··· 253 253 #define virt_addr_valid(kaddr) \ 254 254 __virt_addr_valid((const volatile void *) (kaddr)) 255 255 256 - #define VM_DATA_DEFAULT_FLAGS \ 257 - (VM_READ | VM_WRITE | \ 258 - ((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0) | \ 259 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 256 + #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC 260 257 261 258 #include <asm-generic/memory_model.h> 262 259 #include <asm-generic/getorder.h>
-3
arch/nds32/include/asm/page.h
··· 59 59 60 60 #endif /* !__ASSEMBLY__ */ 61 61 62 - #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ 63 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 64 - 65 62 #endif /* __KERNEL__ */ 66 63 67 64 #endif
+1 -2
arch/nios2/include/asm/page.h
··· 98 98 # define virt_to_page(vaddr) pfn_to_page(PFN_DOWN(virt_to_phys(vaddr))) 99 99 # define virt_addr_valid(vaddr) pfn_valid(PFN_DOWN(virt_to_phys(vaddr))) 100 100 101 - # define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | \ 102 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 101 + # define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_NON_EXEC 103 102 104 103 #include <asm-generic/memory_model.h> 105 104
-5
arch/openrisc/include/asm/page.h
··· 86 86 87 87 #endif /* __ASSEMBLY__ */ 88 88 89 - 90 - #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ 91 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 92 - 93 - 94 89 #include <asm-generic/memory_model.h> 95 90 #include <asm-generic/getorder.h> 96 91
-3
arch/parisc/include/asm/page.h
··· 180 180 #define page_to_phys(page) (page_to_pfn(page) << PAGE_SHIFT) 181 181 #define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) 182 182 183 - #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ 184 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 185 - 186 183 #include <asm-generic/memory_model.h> 187 184 #include <asm-generic/getorder.h> 188 185 #include <asm/pdc.h>
+2 -7
arch/powerpc/include/asm/page.h
··· 240 240 * and needs to be executable. This means the whole heap ends 241 241 * up being executable. 242 242 */ 243 - #define VM_DATA_DEFAULT_FLAGS32 \ 244 - (((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0) | \ 245 - VM_READ | VM_WRITE | \ 246 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 247 - 248 - #define VM_DATA_DEFAULT_FLAGS64 (VM_READ | VM_WRITE | \ 249 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 243 + #define VM_DATA_DEFAULT_FLAGS32 VM_DATA_FLAGS_TSK_EXEC 244 + #define VM_DATA_DEFAULT_FLAGS64 VM_DATA_FLAGS_NON_EXEC 250 245 251 246 #ifdef __powerpc64__ 252 247 #include <asm/page_64.h>
+2 -5
arch/powerpc/include/asm/page_64.h
··· 94 94 * stack by default, so in the absence of a PT_GNU_STACK program header 95 95 * we turn execute permission off. 96 96 */ 97 - #define VM_STACK_DEFAULT_FLAGS32 (VM_READ | VM_WRITE | VM_EXEC | \ 98 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 99 - 100 - #define VM_STACK_DEFAULT_FLAGS64 (VM_READ | VM_WRITE | \ 101 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 97 + #define VM_STACK_DEFAULT_FLAGS32 VM_DATA_FLAGS_EXEC 98 + #define VM_STACK_DEFAULT_FLAGS64 VM_DATA_FLAGS_NON_EXEC 102 99 103 100 #define VM_STACK_DEFAULT_FLAGS \ 104 101 (is_32bit_task() ? \
+1 -2
arch/riscv/include/asm/page.h
··· 137 137 138 138 #define virt_addr_valid(vaddr) (pfn_valid(virt_to_pfn(vaddr))) 139 139 140 - #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | \ 141 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 140 + #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_NON_EXEC 142 141 143 142 #include <asm-generic/memory_model.h> 144 143 #include <asm-generic/getorder.h>
+1 -2
arch/s390/include/asm/page.h
··· 181 181 182 182 #define virt_addr_valid(kaddr) pfn_valid(virt_to_pfn(kaddr)) 183 183 184 - #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | \ 185 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 184 + #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_NON_EXEC 186 185 187 186 #include <asm-generic/memory_model.h> 188 187 #include <asm-generic/getorder.h>
-3
arch/sh/include/asm/page.h
··· 182 182 #endif 183 183 #define virt_addr_valid(kaddr) pfn_valid(__pa(kaddr) >> PAGE_SHIFT) 184 184 185 - #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ 186 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 187 - 188 185 #include <asm-generic/memory_model.h> 189 186 #include <asm-generic/getorder.h> 190 187
-3
arch/sparc/include/asm/page_32.h
··· 133 133 #define pfn_valid(pfn) (((pfn) >= (pfn_base)) && (((pfn)-(pfn_base)) < max_mapnr)) 134 134 #define virt_addr_valid(kaddr) ((((unsigned long)(kaddr)-PAGE_OFFSET)>>PAGE_SHIFT) < max_mapnr) 135 135 136 - #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ 137 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 138 - 139 136 #include <asm-generic/memory_model.h> 140 137 #include <asm-generic/getorder.h> 141 138
-3
arch/sparc/include/asm/page_64.h
··· 158 158 159 159 #endif /* !(__ASSEMBLY__) */ 160 160 161 - #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ 162 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 163 - 164 161 #include <asm-generic/getorder.h> 165 162 166 163 #endif /* _SPARC64_PAGE_H */
-3
arch/unicore32/include/asm/page.h
··· 69 69 70 70 #endif /* !__ASSEMBLY__ */ 71 71 72 - #define VM_DATA_DEFAULT_FLAGS \ 73 - (VM_READ | VM_WRITE | VM_EXEC | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 74 - 75 72 #include <asm-generic/getorder.h> 76 73 77 74 #endif
+1 -3
arch/x86/include/asm/page_types.h
··· 35 35 36 36 #define PAGE_OFFSET ((unsigned long)__PAGE_OFFSET) 37 37 38 - #define VM_DATA_DEFAULT_FLAGS \ 39 - (((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0 ) | \ 40 - VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 38 + #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC 41 39 42 40 #define __PHYSICAL_START ALIGN(CONFIG_PHYSICAL_START, \ 43 41 CONFIG_PHYSICAL_ALIGN)
+2 -8
arch/x86/um/asm/vm-flags.h
··· 9 9 10 10 #ifdef CONFIG_X86_32 11 11 12 - #define VM_DATA_DEFAULT_FLAGS \ 13 - (VM_READ | VM_WRITE | \ 14 - ((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0 ) | \ 15 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 12 + #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC 16 13 17 14 #else 18 15 19 - #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ 20 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 21 - #define VM_STACK_DEFAULT_FLAGS (VM_GROWSDOWN | VM_READ | VM_WRITE | \ 22 - VM_EXEC | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 16 + #define VM_STACK_DEFAULT_FLAGS (VM_GROWSDOWN | VM_DATA_FLAGS_EXEC) 23 17 24 18 #endif 25 19 #endif
-3
arch/xtensa/include/asm/page.h
··· 203 203 204 204 #endif /* __ASSEMBLY__ */ 205 205 206 - #define VM_DATA_DEFAULT_FLAGS (VM_READ | VM_WRITE | VM_EXEC | \ 207 - VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 208 - 209 206 #include <asm-generic/memory_model.h> 210 207 #endif /* _XTENSA_PAGE_H */
+14
include/linux/mm.h
··· 343 343 /* Bits set in the VMA until the stack is in its final location */ 344 344 #define VM_STACK_INCOMPLETE_SETUP (VM_RAND_READ | VM_SEQ_READ) 345 345 346 + #define TASK_EXEC ((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0) 347 + 348 + /* Common data flag combinations */ 349 + #define VM_DATA_FLAGS_TSK_EXEC (VM_READ | VM_WRITE | TASK_EXEC | \ 350 + VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 351 + #define VM_DATA_FLAGS_NON_EXEC (VM_READ | VM_WRITE | VM_MAYREAD | \ 352 + VM_MAYWRITE | VM_MAYEXEC) 353 + #define VM_DATA_FLAGS_EXEC (VM_READ | VM_WRITE | VM_EXEC | \ 354 + VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) 355 + 356 + #ifndef VM_DATA_DEFAULT_FLAGS /* arch can override this */ 357 + #define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_EXEC 358 + #endif 359 + 346 360 #ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */ 347 361 #define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS 348 362 #endif