From 30cbd0c83ef3d0edac2d5bcc41a9a2b7a843ae58 Mon Sep 17 00:00:00 2001 From: Andrew Cooper Date: Tue, 6 Feb 2018 13:45:17 +0000 Subject: [PATCH] x86/spec_ctrl: Fix determination of when to use IBRS The original version of this logic was: /* * On Intel hardware, we'd like to use retpoline in preference to * IBRS, but only if it is safe on this hardware. */ else if ( boot_cpu_has(X86_FEATURE_IBRSB) ) { if ( retpoline_safe() ) thunk = THUNK_RETPOLINE; else ibrs = true; } but it was changed by a request during review. Sadly, the result is buggy as it breaks the later fallback logic by allowing IBRS to appear as available when in fact it isn't. This in practice means that on repoline-unsafe hardware without IBRS, we select THUNK_JUMP despite intending to select THUNK_RETPOLINE. Reported-by: Zhenzhong Duan Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- xen/arch/x86/spec_ctrl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xen/arch/x86/spec_ctrl.c b/xen/arch/x86/spec_ctrl.c index f10ffbf823..725626b52b 100644 --- a/xen/arch/x86/spec_ctrl.c +++ b/xen/arch/x86/spec_ctrl.c @@ -223,7 +223,7 @@ void __init init_speculation_mitigations(void) */ else if ( retpoline_safe() ) thunk = THUNK_RETPOLINE; - else + else if ( boot_cpu_has(X86_FEATURE_IBRSB) ) ibrs = true; } /* Without compiler thunk support, use IBRS if available. */ -- 2.39.5