]> git.dujemihanovic.xyz Git - linux.git/commitdiff
x86/entry: Remove UNTRAIN_RET from native_irq_return_ldt
authorAlexandre Chartre <alexandre.chartre@oracle.com>
Wed, 13 Jul 2022 19:58:08 +0000 (21:58 +0200)
committerBorislav Petkov <bp@suse.de>
Thu, 14 Jul 2022 07:45:12 +0000 (09:45 +0200)
UNTRAIN_RET is not needed in native_irq_return_ldt because RET
untraining has already been done at this point.

In addition, when the RETBleed mitigation is IBPB, UNTRAIN_RET clobbers
several registers (AX, CX, DX) so here it trashes user values which are
in these registers.

Signed-off-by: Alexandre Chartre <alexandre.chartre@oracle.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Link: https://lore.kernel.org/r/35b0d50f-12d1-10c3-f5e8-d6c140486d4a@oracle.com
arch/x86/entry/entry_64.S

index 285e043a3e40a46d4db98515db3f0beb6660f3de..9953d966d12443115bc7ecb3d5c083c9b5c8847f 100644 (file)
@@ -727,7 +727,6 @@ native_irq_return_ldt:
        pushq   %rdi                            /* Stash user RDI */
        swapgs                                  /* to kernel GS */
        SWITCH_TO_KERNEL_CR3 scratch_reg=%rdi   /* to kernel CR3 */
-       UNTRAIN_RET
 
        movq    PER_CPU_VAR(espfix_waddr), %rdi
        movq    %rax, (0*8)(%rdi)               /* user RAX */