OSDN Git Service

x86/entry/32: Clarify register saving in __switch_to_asm()
authorThomas Gleixner <tglx@linutronix.de>
Sat, 16 Nov 2019 10:12:03 +0000 (11:12 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Sat, 16 Nov 2019 10:24:07 +0000 (11:24 +0100)
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>
arch/x86/entry/entry_32.S

index f83ca5a..99fad6f 100644 (file)
@@ -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