smap.h (4332195c5615bf748624094ce4ff6797e475024d) | smap.h (669f8a900198599d3c2e2e463bafe12d30d96507) |
---|---|
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 --- 13 unchanged lines hidden (view full) --- 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 | 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 --- 13 unchanged lines hidden (view full) --- 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 | 30#define ASM_CLAC \ 31 ALTERNATIVE "", __stringify(__ASM_CLAC), X86_FEATURE_SMAP |
38 | 32 |
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 | 33#define ASM_STAC \ 34 ALTERNATIVE "", __stringify(__ASM_STAC), X86_FEATURE_SMAP |
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 61static __always_inline void clac(void) 62{ 63 /* Note: a barrier is implicit in alternative() */ | 35 36#else /* CONFIG_X86_SMAP */ 37 38#define ASM_CLAC 39#define ASM_STAC 40 41#endif /* CONFIG_X86_SMAP */ 42 43#else /* __ASSEMBLY__ */ 44 45#include <asm/alternative.h> 46 47#ifdef CONFIG_X86_SMAP 48 49static __always_inline void clac(void) 50{ 51 /* Note: a barrier is implicit in alternative() */ |
64 alternative(ASM_NOP3, __stringify(__ASM_CLAC), X86_FEATURE_SMAP); | 52 alternative("", __stringify(__ASM_CLAC), X86_FEATURE_SMAP); |
65} 66 67static __always_inline void stac(void) 68{ 69 /* Note: a barrier is implicit in alternative() */ | 53} 54 55static __always_inline void stac(void) 56{ 57 /* Note: a barrier is implicit in alternative() */ |
70 alternative(ASM_NOP3, __stringify(__ASM_STAC), X86_FEATURE_SMAP); | 58 alternative("", __stringify(__ASM_STAC), X86_FEATURE_SMAP); |
71} 72 73/* These macros can be used in asm() statements */ 74#define ASM_CLAC \ | 59} 60 61/* These macros can be used in asm() statements */ 62#define ASM_CLAC \ |
75 ALTERNATIVE(ASM_NOP3, __stringify(__ASM_CLAC), X86_FEATURE_SMAP) | 63 ALTERNATIVE("", __stringify(__ASM_CLAC), X86_FEATURE_SMAP) |
76#define ASM_STAC \ | 64#define ASM_STAC \ |
77 ALTERNATIVE(ASM_NOP3, __stringify(__ASM_STAC), X86_FEATURE_SMAP) | 65 ALTERNATIVE("", __stringify(__ASM_STAC), X86_FEATURE_SMAP) |
78 79#else /* CONFIG_X86_SMAP */ 80 81static inline void clac(void) { } 82static 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 */ | 66 67#else /* CONFIG_X86_SMAP */ 68 69static inline void clac(void) { } 70static inline void stac(void) { } 71 72#define ASM_CLAC 73#define ASM_STAC 74 75#endif /* CONFIG_X86_SMAP */ 76 77#endif /* __ASSEMBLY__ */ 78 79#endif /* _ASM_X86_SMAP_H */ |