Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

x86/fred: No ESPFIX needed when FRED is enabled

Because FRED always restores the full value of %rsp, ESPFIX is
no longer needed when it's enabled.

Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Signed-off-by: Xin Li <xin3.li@intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Tested-by: Shan Kang <shan.kang@intel.com>
Link: https://lore.kernel.org/r/20231205105030.8698-20-xin3.li@intel.com

authored by

H. Peter Anvin (Intel) and committed by
Borislav Petkov (AMD)
df883873 09794f68

+8
+8
arch/x86/kernel/espfix_64.c
··· 106 106 pgd_t *pgd; 107 107 p4d_t *p4d; 108 108 109 + /* FRED systems always restore the full value of %rsp */ 110 + if (cpu_feature_enabled(X86_FEATURE_FRED)) 111 + return; 112 + 109 113 /* Install the espfix pud into the kernel page directory */ 110 114 pgd = &init_top_pgt[pgd_index(ESPFIX_BASE_ADDR)]; 111 115 p4d = p4d_alloc(&init_mm, pgd, ESPFIX_BASE_ADDR); ··· 132 128 int n, node; 133 129 void *stack_page; 134 130 pteval_t ptemask; 131 + 132 + /* FRED systems always restore the full value of %rsp */ 133 + if (cpu_feature_enabled(X86_FEATURE_FRED)) 134 + return; 135 135 136 136 /* We only have to do this once... */ 137 137 if (likely(per_cpu(espfix_stack, cpu)))