[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RFC][PATCH 6/6] x86/power: Seal restore_processor_state()
Disallow indirect branches to restore_processor_state(). Signed-off-by: Peter Zijlstra (Intel) <peterz@xxxxxxxxxxxxx> --- arch/x86/include/asm/suspend_64.h | 4 ++++ arch/x86/power/cpu.c | 2 +- arch/x86/power/hibernate_asm_64.S | 4 ++++ include/linux/suspend.h | 4 ++++ 4 files changed, 13 insertions(+), 1 deletion(-) --- a/arch/x86/include/asm/suspend_64.h +++ b/arch/x86/include/asm/suspend_64.h @@ -9,6 +9,7 @@ #include <asm/desc.h> #include <asm/fpu/api.h> +#include <asm/ibt.h> /* * Image of the saved processor state, used by the low level ACPI suspend to @@ -61,4 +62,7 @@ struct saved_context { extern char core_restore_code[]; extern char restore_registers[]; +#define restore_processor_state restore_processor_state +extern __noendbr void restore_processor_state(void); + #endif /* _ASM_X86_SUSPEND_64_H */ --- a/arch/x86/power/cpu.c +++ b/arch/x86/power/cpu.c @@ -288,7 +288,7 @@ static __always_inline void __restore_pr } /* Needed by apm.c */ -void noinstr restore_processor_state(void) +void __noendbr noinstr restore_processor_state(void) { __restore_processor_state(&saved_context); } --- a/arch/x86/power/hibernate_asm_64.S +++ b/arch/x86/power/hibernate_asm_64.S @@ -23,6 +23,10 @@ #include <asm/frame.h> #include <asm/nospec-branch.h> +.pushsection .discard.noendbr +.quad restore_processor_state +.popsection + /* code below belongs to the image kernel */ .align PAGE_SIZE SYM_FUNC_START(restore_registers) --- a/include/linux/suspend.h +++ b/include/linux/suspend.h @@ -9,6 +9,7 @@ #include <linux/mm.h> #include <linux/freezer.h> #include <asm/errno.h> +#include <asm/suspend.h> #ifdef CONFIG_VT extern void pm_set_vt_switch(int); @@ -483,7 +484,10 @@ extern struct mutex system_transition_mu #ifdef CONFIG_PM_SLEEP void save_processor_state(void); + +#ifndef restore_processor_state void restore_processor_state(void); +#endif /* kernel/power/main.c */ extern int register_pm_notifier(struct notifier_block *nb);
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |