From: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
To: x86@kernel.org, David Kaplan <david.kaplan@amd.com>,
Nikolay Borisov <nik.borisov@suse.com>,
"H. Peter Anvin" <hpa@zytor.com>,
Josh Poimboeuf <jpoimboe@kernel.org>,
Sean Christopherson <seanjc@google.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>
Cc: linux-kernel@vger.kernel.org, kvm@vger.kernel.org,
Asit Mallick <asit.k.mallick@intel.com>,
Tao Zhang <tao1.zhang@intel.com>
Subject: [PATCH v6 2/9] x86/bhi: Make clear_bhb_loop() effective on newer CPUs
Date: Mon, 1 Dec 2025 22:19:14 -0800 [thread overview]
Message-ID: <20251201-vmscape-bhb-v6-2-d610dd515714@linux.intel.com> (raw)
In-Reply-To: <20251201-vmscape-bhb-v6-0-d610dd515714@linux.intel.com>
As a mitigation for BHI, clear_bhb_loop() executes branches that overwrites
the Branch History Buffer (BHB). On Alder Lake and newer parts this
sequence is not sufficient because it doesn't clear enough entries. This
was not an issue because these CPUs have a hardware control (BHI_DIS_S)
that mitigates BHI in kernel.
BHI variant of VMSCAPE requires isolating branch history between guests and
userspace. Note that there is no equivalent hardware control for userspace.
To effectively isolate branch history on newer CPUs, clear_bhb_loop()
should execute sufficient number of branches to clear a larger BHB.
Dynamically set the loop count of clear_bhb_loop() such that it is
effective on newer CPUs too. Use the hardware control enumeration
X86_FEATURE_BHI_CTRL to select the appropriate loop count.
Suggested-by: Dave Hansen <dave.hansen@linux.intel.com>
Reviewed-by: Nikolay Borisov <nik.borisov@suse.com>
Signed-off-by: Pawan Gupta <pawan.kumar.gupta@linux.intel.com>
---
arch/x86/entry/entry_64.S | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/arch/x86/entry/entry_64.S b/arch/x86/entry/entry_64.S
index 886f86790b4467347031bc27d3d761d5cc286da1..9f6f4a7c5baf1fe4e3ab18b11e25e2fbcc77489d 100644
--- a/arch/x86/entry/entry_64.S
+++ b/arch/x86/entry/entry_64.S
@@ -1536,7 +1536,11 @@ SYM_FUNC_START(clear_bhb_loop)
ANNOTATE_NOENDBR
push %rbp
mov %rsp, %rbp
- movl $5, %ecx
+
+ /* loop count differs based on BHI_CTRL, see Intel's BHI guidance */
+ ALTERNATIVE "movl $5, %ecx; movl $5, %edx", \
+ "movl $12, %ecx; movl $7, %edx", X86_FEATURE_BHI_CTRL
+
ANNOTATE_INTRA_FUNCTION_CALL
call 1f
jmp 5f
@@ -1557,7 +1561,7 @@ SYM_FUNC_START(clear_bhb_loop)
* but some Clang versions (e.g. 18) don't like this.
*/
.skip 32 - 18, 0xcc
-2: movl $5, %eax
+2: movl %edx, %eax
3: jmp 4f
nop
4: sub $1, %eax
--
2.34.1
next prev parent reply other threads:[~2025-12-02 6:19 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-02 6:18 [PATCH v6 0/9] VMSCAPE optimization for BHI variant Pawan Gupta
2025-12-02 6:18 ` [PATCH v6 1/9] x86/bhi: x86/vmscape: Move LFENCE out of clear_bhb_loop() Pawan Gupta
2026-01-01 12:51 ` Borislav Petkov
2026-01-06 4:29 ` Pawan Gupta
2025-12-02 6:19 ` Pawan Gupta [this message]
2025-12-10 12:31 ` [PATCH v6 2/9] x86/bhi: Make clear_bhb_loop() effective on newer CPUs Nikolay Borisov
2025-12-10 13:35 ` David Laight
2025-12-10 15:42 ` Nikolay Borisov
2025-12-14 18:38 ` Pawan Gupta
2025-12-14 19:02 ` David Laight
2025-12-15 18:01 ` Pawan Gupta
2025-12-15 21:05 ` David Laight
2025-12-14 17:16 ` Pawan Gupta
2026-01-24 19:34 ` Borislav Petkov
2026-03-05 0:41 ` Pawan Gupta
2025-12-02 6:19 ` [PATCH v6 3/9] x86/vmscape: Rename x86_ibpb_exit_to_user to x86_predictor_flush_exit_to_user Pawan Gupta
2025-12-02 6:19 ` [PATCH v6 4/9] x86/vmscape: Move mitigation selection to a switch() Pawan Gupta
2025-12-10 16:15 ` Nikolay Borisov
2025-12-02 6:19 ` [PATCH v6 5/9] x86/vmscape: Use write_ibpb() instead of indirect_branch_prediction_barrier() Pawan Gupta
2025-12-02 6:20 ` [PATCH v6 6/9] x86/vmscape: Use static_call() for predictor flush Pawan Gupta
2025-12-11 10:06 ` Nikolay Borisov
2025-12-11 10:50 ` Peter Zijlstra
2025-12-14 18:45 ` Pawan Gupta
2025-12-02 6:20 ` [PATCH v6 7/9] x86/vmscape: Deploy BHB clearing mitigation Pawan Gupta
2025-12-11 14:26 ` Nikolay Borisov
2025-12-02 6:20 ` [PATCH v6 8/9] x86/vmscape: Fix conflicting attack-vector controls with =force Pawan Gupta
2025-12-02 6:21 ` [PATCH v6 9/9] x86/vmscape: Add cmdline vmscape=on to override attack vector controls Pawan Gupta
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251201-vmscape-bhb-v6-2-d610dd515714@linux.intel.com \
--to=pawan.kumar.gupta@linux.intel.com \
--cc=asit.k.mallick@intel.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=david.kaplan@amd.com \
--cc=hpa@zytor.com \
--cc=jpoimboe@kernel.org \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=nik.borisov@suse.com \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=tao1.zhang@intel.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®