Messages in this thread | | | Date | Wed, 8 May 2024 18:10:21 +0300 | Subject | Re: [PATCH v5 3/3] x86/bugs: Add 'spectre_bhi=vmexit' cmdline option | From | Nikolay Borisov <> |
| |
On 7.05.24 г. 8:30 ч., Josh Poimboeuf wrote: > In cloud environments it can be useful to *only* enable the vmexit > mitigation and leave syscalls vulnerable. Add that as an option. > > This is similar to the old spectre_bhi=auto option which was removed > with the following commit: > > 36d4fe147c87 ("x86/bugs: Remove CONFIG_BHI_MITIGATION_AUTO and spectre_bhi=auto") > > with the main difference being that this has a more descriptive name and > is disabled by default. > > Requested-by: Maksim Davydov <davydov-max@yandex-team.ru> > Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org> > --- > Documentation/admin-guide/kernel-parameters.txt | 12 +++++++++--- > arch/x86/kernel/cpu/bugs.c | 16 +++++++++++----- > 2 files changed, 20 insertions(+), 8 deletions(-) > > diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt > index 213d0719e2b7..9c1f63f04502 100644 > --- a/Documentation/admin-guide/kernel-parameters.txt > +++ b/Documentation/admin-guide/kernel-parameters.txt > @@ -6072,9 +6072,15 @@ > deployment of the HW BHI control and the SW BHB > clearing sequence. > > - on - (default) Enable the HW or SW mitigation > - as needed. > - off - Disable the mitigation. > + on - (default) Enable the HW or SW mitigation as > + needed. This protects the kernel from > + both syscalls and VMs. > + vmexit - On systems which don't have the HW mitigation > + available, enable the SW mitigation on vmexit > + ONLY. On such systems, the host kernel is > + protected from VM-originated BHI attacks, but > + may still be vulnerable to syscall attacks. > + off - Disable the mitigation. > > spectre_v2= [X86,EARLY] Control mitigation of Spectre variant 2 > (indirect branch speculation) vulnerability. > diff --git a/arch/x86/kernel/cpu/bugs.c b/arch/x86/kernel/cpu/bugs.c > index ab18185894df..6974c8c9792d 100644 > --- a/arch/x86/kernel/cpu/bugs.c > +++ b/arch/x86/kernel/cpu/bugs.c > @@ -1625,6 +1625,7 @@ static bool __init spec_ctrl_bhi_dis(void) > enum bhi_mitigations { > BHI_MITIGATION_OFF, > BHI_MITIGATION_ON, > + BHI_MITIGATION_VMEXIT_ONLY, > }; > > static enum bhi_mitigations bhi_mitigation __ro_after_init = > @@ -1639,6 +1640,8 @@ static int __init spectre_bhi_parse_cmdline(char *str) > bhi_mitigation = BHI_MITIGATION_OFF; > else if (!strcmp(str, "on")) > bhi_mitigation = BHI_MITIGATION_ON; > + else if (!strcmp(str, "vmexit")) > + bhi_mitigation = BHI_MITIGATION_VMEXIT_ONLY; > else > pr_err("Ignoring unknown spectre_bhi option (%s)", str); > > @@ -1659,19 +1662,22 @@ static void __init bhi_select_mitigation(void) > return; > } > > + /* Mitigate in hardware if supported */ > if (spec_ctrl_bhi_dis()) > return; > > if (!IS_ENABLED(CONFIG_X86_64)) > return; > > - /* Mitigate KVM by default */ > - setup_force_cpu_cap(X86_FEATURE_CLEAR_BHB_LOOP_ON_VMEXIT); > - pr_info("Spectre BHI mitigation: SW BHB clearing on vm exit\n"); > + if (bhi_mitigation == BHI_MITIGATION_VMEXIT_ONLY) { > + pr_info("Spectre BHI mitigation: SW BHB clearing on vm exit only\n"); > + setup_force_cpu_cap(X86_FEATURE_CLEAR_BHB_LOOP_ON_VMEXIT); > + return; > + }
nit: How about setting CLEAR_BHB_LOOP_ON_VMEXIT unconditionally, then afterwards checking if MITIGATION_VMEXIT_ONLY is set and if yes simply return, that way you don't duplicate the setup of the VMEXIT code
> > - /* Mitigate syscalls when the mitigation is forced =on */ > + pr_info("Spectre BHI mitigation: SW BHB clearing on syscall and vm exit\n"); > setup_force_cpu_cap(X86_FEATURE_CLEAR_BHB_LOOP); > - pr_info("Spectre BHI mitigation: SW BHB clearing on syscall\n"); > + setup_force_cpu_cap(X86_FEATURE_CLEAR_BHB_LOOP_ON_VMEXIT); > } > > static void __init spectre_v2_select_mitigation(void)
| |