forked from mirrors/linux
		
	 d253ca0c38
			
		
	
	
		d253ca0c38
		
	
	
	
	
		
			
			Add two new functions set_direct_map_default_noflush() and set_direct_map_invalid_noflush() for setting the direct map alias for the page to its default valid permissions and to an invalid state that cannot be cached in a TLB, respectively. These functions do not flush the TLB. Note, __kernel_map_pages() does something similar but flushes the TLB and doesn't reset the permission bits to default on all architectures. Also add an ARCH config ARCH_HAS_SET_DIRECT_MAP for specifying whether these have an actual implementation or a default empty one. Signed-off-by: Rick Edgecombe <rick.p.edgecombe@intel.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: <akpm@linux-foundation.org> Cc: <ard.biesheuvel@linaro.org> Cc: <deneen.t.dock@intel.com> Cc: <kernel-hardening@lists.openwall.com> Cc: <kristen@linux.intel.com> Cc: <linux_dti@icloud.com> Cc: <will.deacon@arm.com> Cc: Andy Lutomirski <luto@kernel.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Nadav Amit <nadav.amit@gmail.com> Cc: Rik van Riel <riel@surriel.com> Cc: Thomas Gleixner <tglx@linutronix.de> Link: https://lkml.kernel.org/r/20190426001143.4983-15-namit@vmware.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
		
			
				
	
	
		
			57 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Copyright 2017, Michael Ellerman, IBM Corporation.
 | |
|  *
 | |
|  * This program is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU General Public License version
 | |
|  * 2 as published by the Free Software Foundation;
 | |
|  */
 | |
| #ifndef _LINUX_SET_MEMORY_H_
 | |
| #define _LINUX_SET_MEMORY_H_
 | |
| 
 | |
| #ifdef CONFIG_ARCH_HAS_SET_MEMORY
 | |
| #include <asm/set_memory.h>
 | |
| #else
 | |
| static inline int set_memory_ro(unsigned long addr, int numpages) { return 0; }
 | |
| static inline int set_memory_rw(unsigned long addr, int numpages) { return 0; }
 | |
| static inline int set_memory_x(unsigned long addr,  int numpages) { return 0; }
 | |
| static inline int set_memory_nx(unsigned long addr, int numpages) { return 0; }
 | |
| #endif
 | |
| 
 | |
| #ifndef CONFIG_ARCH_HAS_SET_DIRECT_MAP
 | |
| static inline int set_direct_map_invalid_noflush(struct page *page)
 | |
| {
 | |
| 	return 0;
 | |
| }
 | |
| static inline int set_direct_map_default_noflush(struct page *page)
 | |
| {
 | |
| 	return 0;
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #ifndef set_mce_nospec
 | |
| static inline int set_mce_nospec(unsigned long pfn)
 | |
| {
 | |
| 	return 0;
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #ifndef clear_mce_nospec
 | |
| static inline int clear_mce_nospec(unsigned long pfn)
 | |
| {
 | |
| 	return 0;
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #ifndef CONFIG_ARCH_HAS_MEM_ENCRYPT
 | |
| static inline int set_memory_encrypted(unsigned long addr, int numpages)
 | |
| {
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| static inline int set_memory_decrypted(unsigned long addr, int numpages)
 | |
| {
 | |
| 	return 0;
 | |
| }
 | |
| #endif /* CONFIG_ARCH_HAS_MEM_ENCRYPT */
 | |
| 
 | |
| #endif /* _LINUX_SET_MEMORY_H_ */
 |