powerpc/64: Add interrupt register sanitisation macros
Include in asm/ppc_asm.h macros to be used in multiple successive patches to implement zeroising architected registers in interrupt handlers. Registers will be sanitised in this fashion in future patches to reduce the speculation influence of user-controlled register values. These mitigations will be configurable through the CONFIG_INTERRUPT_SANITIZE_REGISTERS Kconfig option. Included are macros for conditionally zeroising registers and restoring as required with the mitigation enabled. With the mitigation disabled, non-volatiles must be restored on demand at separate locations to those required by the mitigation. Reviewed-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Rohan McLure <rmclure@linux.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20221201071019.1953023-2-rmclure@linux.ibm.com
This commit is contained in:
parent
0e23347f1e
commit
cbf892ba56
1 changed files with 19 additions and 0 deletions
|
@ -74,6 +74,25 @@
|
|||
#define SAVE_GPR(n, base) SAVE_GPRS(n, n, base)
|
||||
#define REST_GPR(n, base) REST_GPRS(n, n, base)
|
||||
|
||||
/* macros for handling user register sanitisation */
|
||||
#ifdef CONFIG_INTERRUPT_SANITIZE_REGISTERS
|
||||
#define SANITIZE_SYSCALL_GPRS() ZEROIZE_GPR(0); \
|
||||
ZEROIZE_GPRS(5, 12); \
|
||||
ZEROIZE_NVGPRS()
|
||||
#define SANITIZE_GPR(n) ZEROIZE_GPR(n)
|
||||
#define SANITIZE_GPRS(start, end) ZEROIZE_GPRS(start, end)
|
||||
#define SANITIZE_NVGPRS() ZEROIZE_NVGPRS()
|
||||
#define SANITIZE_RESTORE_NVGPRS() REST_NVGPRS(r1)
|
||||
#define HANDLER_RESTORE_NVGPRS()
|
||||
#else
|
||||
#define SANITIZE_SYSCALL_GPRS()
|
||||
#define SANITIZE_GPR(n)
|
||||
#define SANITIZE_GPRS(start, end)
|
||||
#define SANITIZE_NVGPRS()
|
||||
#define SANITIZE_RESTORE_NVGPRS()
|
||||
#define HANDLER_RESTORE_NVGPRS() REST_NVGPRS(r1)
|
||||
#endif /* CONFIG_INTERRUPT_SANITIZE_REGISTERS */
|
||||
|
||||
#define SAVE_FPR(n, base) stfd n,8*TS_FPRWIDTH*(n)(base)
|
||||
#define SAVE_2FPRS(n, base) SAVE_FPR(n, base); SAVE_FPR(n+1, base)
|
||||
#define SAVE_4FPRS(n, base) SAVE_2FPRS(n, base); SAVE_2FPRS(n+2, base)
|
||||
|
|
Loading…
Add table
Reference in a new issue