~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/x86/include/asm/smap.h

Version: ~ [ linux-5.15-rc5 ] ~ [ linux-5.14.11 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.72 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.152 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.210 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.250 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.286 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.288 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.18.140 ] ~ [ linux-3.16.85 ] ~ [ linux-3.14.79 ] ~ [ linux-3.12.74 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.5 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /*
  2  * Supervisor Mode Access Prevention support
  3  *
  4  * Copyright (C) 2012 Intel Corporation
  5  * Author: H. Peter Anvin <hpa@linux.intel.com>
  6  *
  7  * This program is free software; you can redistribute it and/or
  8  * modify it under the terms of the GNU General Public License
  9  * as published by the Free Software Foundation; version 2
 10  * of the License.
 11  */
 12 
 13 #ifndef _ASM_X86_SMAP_H
 14 #define _ASM_X86_SMAP_H
 15 
 16 #include <linux/stringify.h>
 17 #include <asm/nops.h>
 18 #include <asm/cpufeatures.h>
 19 
 20 /* "Raw" instruction opcodes */
 21 #define __ASM_CLAC      .byte 0x0f,0x01,0xca
 22 #define __ASM_STAC      .byte 0x0f,0x01,0xcb
 23 
 24 #ifdef __ASSEMBLY__
 25 
 26 #include <asm/alternative-asm.h>
 27 
 28 #ifdef CONFIG_X86_SMAP
 29 
 30 #define ASM_CLAC                                                        \
 31         661: ASM_NOP3 ;                                                 \
 32         .pushsection .altinstr_replacement, "ax" ;                      \
 33         662: __ASM_CLAC ;                                               \
 34         .popsection ;                                                   \
 35         .pushsection .altinstructions, "a" ;                            \
 36         altinstruction_entry 661b, 662b, X86_FEATURE_SMAP, 3, 3, 0 ;    \
 37         .popsection
 38 
 39 #define ASM_STAC                                                        \
 40         661: ASM_NOP3 ;                                                 \
 41         .pushsection .altinstr_replacement, "ax" ;                      \
 42         662: __ASM_STAC ;                                               \
 43         .popsection ;                                                   \
 44         .pushsection .altinstructions, "a" ;                            \
 45         altinstruction_entry 661b, 662b, X86_FEATURE_SMAP, 3, 3, 0 ;    \
 46         .popsection
 47 
 48 #else /* CONFIG_X86_SMAP */
 49 
 50 #define ASM_CLAC
 51 #define ASM_STAC
 52 
 53 #endif /* CONFIG_X86_SMAP */
 54 
 55 #else /* __ASSEMBLY__ */
 56 
 57 #include <asm/alternative.h>
 58 
 59 #ifdef CONFIG_X86_SMAP
 60 
 61 static __always_inline void clac(void)
 62 {
 63         /* Note: a barrier is implicit in alternative() */
 64         alternative(ASM_NOP3, __stringify(__ASM_CLAC), X86_FEATURE_SMAP);
 65 }
 66 
 67 static __always_inline void stac(void)
 68 {
 69         /* Note: a barrier is implicit in alternative() */
 70         alternative(ASM_NOP3, __stringify(__ASM_STAC), X86_FEATURE_SMAP);
 71 }
 72 
 73 /* These macros can be used in asm() statements */
 74 #define ASM_CLAC \
 75         ALTERNATIVE(ASM_NOP3, __stringify(__ASM_CLAC), X86_FEATURE_SMAP)
 76 #define ASM_STAC \
 77         ALTERNATIVE(ASM_NOP3, __stringify(__ASM_STAC), X86_FEATURE_SMAP)
 78 
 79 #else /* CONFIG_X86_SMAP */
 80 
 81 static inline void clac(void) { }
 82 static inline void stac(void) { }
 83 
 84 #define ASM_CLAC
 85 #define ASM_STAC
 86 
 87 #endif /* CONFIG_X86_SMAP */
 88 
 89 #endif /* __ASSEMBLY__ */
 90 
 91 #endif /* _ASM_X86_SMAP_H */
 92 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp