diff options
author | Peter Zijlstra <peterz@infradead.org> | 2022-07-06 15:33:30 +0200 |
---|---|---|
committer | Borislav Petkov <bp@suse.de> | 2022-07-07 13:39:42 +0200 |
commit | 2c08b9b38f5b0f4a6c2d29be22b695e4ec4a556b (patch) | |
tree | a5e04eec0a7b50de5c307b585a4579275ee69317 | |
parent | f54d45372c6ac9c993451de5e51312485f7d10bc (diff) | |
download | linux-2c08b9b38f5b0f4a6c2d29be22b695e4ec4a556b.tar.gz linux-2c08b9b38f5b0f4a6c2d29be22b695e4ec4a556b.tar.bz2 linux-2c08b9b38f5b0f4a6c2d29be22b695e4ec4a556b.zip |
x86/entry: Move PUSH_AND_CLEAR_REGS() back into error_entry
Commit
ee774dac0da1 ("x86/entry: Move PUSH_AND_CLEAR_REGS out of error_entry()")
moved PUSH_AND_CLEAR_REGS out of error_entry, into its own function, in
part to avoid calling error_entry() for XenPV.
However, commit
7c81c0c9210c ("x86/entry: Avoid very early RET")
had to change that because the 'ret' was too early and moved it into
idtentry, bloating the text size, since idtentry is expanded for every
exception vector.
However, with the advent of xen_error_entry() in commit
d147553b64bad ("x86/xen: Add UNTRAIN_RET")
it became possible to remove PUSH_AND_CLEAR_REGS from idtentry, back
into *error_entry().
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: Borislav Petkov <bp@suse.de>
-rw-r--r-- | arch/x86/entry/entry_64.S | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S index a4ba162e52c3..285e043a3e40 100644 --- a/arch/x86/entry/entry_64.S +++ b/arch/x86/entry/entry_64.S @@ -328,6 +328,8 @@ SYM_CODE_END(ret_from_fork) SYM_CODE_START_LOCAL(xen_error_entry) UNWIND_HINT_FUNC + PUSH_AND_CLEAR_REGS save_ret=1 + ENCODE_FRAME_POINTER 8 UNTRAIN_RET RET SYM_CODE_END(xen_error_entry) @@ -339,9 +341,6 @@ SYM_CODE_END(xen_error_entry) */ .macro idtentry_body cfunc has_error_code:req - PUSH_AND_CLEAR_REGS - ENCODE_FRAME_POINTER - /* * Call error_entry() and switch to the task stack if from userspace. * @@ -1042,6 +1041,10 @@ SYM_CODE_END(paranoid_exit) */ SYM_CODE_START_LOCAL(error_entry) UNWIND_HINT_FUNC + + PUSH_AND_CLEAR_REGS save_ret=1 + ENCODE_FRAME_POINTER 8 + testb $3, CS+8(%rsp) jz .Lerror_kernelspace |