aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/entry
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2019-11-16 11:12:03 +0100
committerThomas Gleixner <tglx@linutronix.de>2019-11-16 11:24:07 +0100
commita3ba966066afbe8fd0d3605ffe04c633083752f1 (patch)
tree46b9571c5a35456ec64e3aa012d217da253435e0 /arch/x86/entry
parentselftests/x86/iopl: Extend test to cover IOPL emulation (diff)
downloadlinux-dev-a3ba966066afbe8fd0d3605ffe04c633083752f1.tar.xz
linux-dev-a3ba966066afbe8fd0d3605ffe04c633083752f1.zip
x86/entry/32: Clarify register saving in __switch_to_asm()
commit 6690e86be83a ("sched/x86: Save [ER]FLAGS on context switch") re-introduced the flags saving on context switch to prevent AC leakage. The pushf/popf instructions are right among the callee saved register section, so the comment explaining the save/restore is not entirely correct. Add a seperate comment to pushf/popf explaining the reason. Reported-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'arch/x86/entry')
-rw-r--r--arch/x86/entry/entry_32.S8
1 files changed, 7 insertions, 1 deletions
diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
index f83ca5aa8b77..99fad6fed03c 100644
--- a/arch/x86/entry/entry_32.S
+++ b/arch/x86/entry/entry_32.S
@@ -718,6 +718,11 @@ ENTRY(__switch_to_asm)
pushl %ebx
pushl %edi
pushl %esi
+ /*
+ * Flags are saved to prevent AC leakage. This could go
+ * away if objtool would have 32bit support to verify
+ * the STAC/CLAC correctness.
+ */
pushfl
/* switch stack */
@@ -740,8 +745,9 @@ ENTRY(__switch_to_asm)
FILL_RETURN_BUFFER %ebx, RSB_CLEAR_LOOPS, X86_FEATURE_RSB_CTXSW
#endif
- /* restore callee-saved registers */
+ /* Restore flags or the incoming task to restore AC state. */
popfl
+ /* restore callee-saved registers */
popl %esi
popl %edi
popl %ebx