| 1 | /* SPDX-License-Identifier: GPL-2.0 */ | 
|---|
| 2 | #ifndef _ASM_X86_SHSTK_H | 
|---|
| 3 | #define _ASM_X86_SHSTK_H | 
|---|
| 4 |  | 
|---|
| 5 | #ifndef __ASSEMBLER__ | 
|---|
| 6 | #include <linux/types.h> | 
|---|
| 7 |  | 
|---|
| 8 | struct task_struct; | 
|---|
| 9 | struct ksignal; | 
|---|
| 10 |  | 
|---|
| 11 | #ifdef CONFIG_X86_USER_SHADOW_STACK | 
|---|
| 12 | struct thread_shstk { | 
|---|
| 13 | u64	base; | 
|---|
| 14 | u64	size; | 
|---|
| 15 | }; | 
|---|
| 16 |  | 
|---|
| 17 | long shstk_prctl(struct task_struct *task, int option, unsigned long arg2); | 
|---|
| 18 | void reset_thread_features(void); | 
|---|
| 19 | unsigned long shstk_alloc_thread_stack(struct task_struct *p, u64 clone_flags, | 
|---|
| 20 | unsigned long stack_size); | 
|---|
| 21 | void shstk_free(struct task_struct *p); | 
|---|
| 22 | int setup_signal_shadow_stack(struct ksignal *ksig); | 
|---|
| 23 | int restore_signal_shadow_stack(void); | 
|---|
| 24 | int shstk_update_last_frame(unsigned long val); | 
|---|
| 25 | bool shstk_is_enabled(void); | 
|---|
| 26 | int shstk_pop(u64 *val); | 
|---|
| 27 | int shstk_push(u64 val); | 
|---|
| 28 | #else | 
|---|
| 29 | static inline long shstk_prctl(struct task_struct *task, int option, | 
|---|
| 30 | unsigned long arg2) { return -EINVAL; } | 
|---|
| 31 | static inline void reset_thread_features(void) {} | 
|---|
| 32 | static inline unsigned long shstk_alloc_thread_stack(struct task_struct *p, | 
|---|
| 33 | u64 clone_flags, | 
|---|
| 34 | unsigned long stack_size) { return 0; } | 
|---|
| 35 | static inline void shstk_free(struct task_struct *p) {} | 
|---|
| 36 | static inline int setup_signal_shadow_stack(struct ksignal *ksig) { return 0; } | 
|---|
| 37 | static inline int restore_signal_shadow_stack(void) { return 0; } | 
|---|
| 38 | static inline int shstk_update_last_frame(unsigned long val) { return 0; } | 
|---|
| 39 | static inline bool shstk_is_enabled(void) { return false; } | 
|---|
| 40 | static inline int shstk_pop(u64 *val) { return -ENOTSUPP; } | 
|---|
| 41 | static inline int shstk_push(u64 val) { return -ENOTSUPP; } | 
|---|
| 42 | #endif /* CONFIG_X86_USER_SHADOW_STACK */ | 
|---|
| 43 |  | 
|---|
| 44 | #endif /* __ASSEMBLER__ */ | 
|---|
| 45 |  | 
|---|
| 46 | #endif /* _ASM_X86_SHSTK_H */ | 
|---|
| 47 |  | 
|---|