diff options
Diffstat (limited to 'debian/patches/bugfix/x86/retbleed/0051-x86-entry-Move-PUSH_AND_CLEAR_REGS-back-into-error_e.patch')
-rw-r--r-- | debian/patches/bugfix/x86/retbleed/0051-x86-entry-Move-PUSH_AND_CLEAR_REGS-back-into-error_e.patch | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/debian/patches/bugfix/x86/retbleed/0051-x86-entry-Move-PUSH_AND_CLEAR_REGS-back-into-error_e.patch b/debian/patches/bugfix/x86/retbleed/0051-x86-entry-Move-PUSH_AND_CLEAR_REGS-back-into-error_e.patch new file mode 100644 index 000000000..b94645ffc --- /dev/null +++ b/debian/patches/bugfix/x86/retbleed/0051-x86-entry-Move-PUSH_AND_CLEAR_REGS-back-into-error_e.patch @@ -0,0 +1,67 @@ +From: Peter Zijlstra <peterz@infradead.org> +Date: Wed, 6 Jul 2022 15:33:30 +0200 +Subject: x86/entry: Move PUSH_AND_CLEAR_REGS() back into error_entry +Origin: https://git.kernel.org/linus/2c08b9b38f5b0f4a6c2d29be22b695e4ec4a556b + +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> +--- + arch/x86/entry/entry_64.S | 9 ++++++--- + 1 file 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 + |