]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
x86/entry_32: Clear CPU buffers after register restore in NMI return
authorPawan Gupta <pawan.kumar.gupta@linux.intel.com>
Wed, 25 Sep 2024 22:25:44 +0000 (15:25 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 22 Oct 2024 13:39:29 +0000 (15:39 +0200)
commit 48a2440d0f20c826b884e04377ccc1e4696c84e9 upstream.

CPU buffers are currently cleared after call to exc_nmi, but before
register state is restored. This may be okay for MDS mitigation but not for
RDFS. Because RDFS mitigation requires CPU buffers to be cleared when
registers don't have any sensitive data.

Move CLEAR_CPU_BUFFERS after RESTORE_ALL_NMI.

Fixes: a0e2dab44d22 ("x86/entry_32: Add VERW just before userspace transition")
Suggested-by: Dave Hansen <dave.hansen@linux.intel.com>
Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
Signed-off-by: Dave Hansen <dave.hansen@linux.intel.com>
Cc:stable@vger.kernel.org
Link: https://lore.kernel.org/all/20240925-fix-dosemu-vm86-v7-2-1de0daca2d42%40linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/x86/entry/entry_32.S

index 27d5582600aec58fedf762ec3f768b1edada2c14..c524aa3f094ab76603cf1ee7d345bad6afd5f5e3 100644 (file)
@@ -1222,7 +1222,6 @@ SYM_CODE_START(asm_exc_nmi)
 
        /* Not on SYSENTER stack. */
        call    exc_nmi
-       CLEAR_CPU_BUFFERS
        jmp     .Lnmi_return
 
 .Lnmi_from_sysenter_stack:
@@ -1243,6 +1242,7 @@ SYM_CODE_START(asm_exc_nmi)
 
        CHECK_AND_APPLY_ESPFIX
        RESTORE_ALL_NMI cr3_reg=%edi pop=4
+       CLEAR_CPU_BUFFERS
        jmp     .Lirq_return
 
 #ifdef CONFIG_X86_ESPFIX32
@@ -1284,6 +1284,7 @@ SYM_CODE_START(asm_exc_nmi)
         *  1 - orig_ax
         */
        lss     (1+5+6)*4(%esp), %esp                   # back to espfix stack
+       CLEAR_CPU_BUFFERS
        jmp     .Lirq_return
 #endif
 SYM_CODE_END(asm_exc_nmi)