summaryrefslogtreecommitdiffstats
path: root/debian/patches/bugfix/x86/retbleed/0051-x86-entry-Move-PUSH_AND_CLEAR_REGS-back-into-error_e.patch
diff options
context:
space:
mode:
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.patch67
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
+