All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] cpu: Fix default mitigation behavior
@ 2024-04-20  0:05 Sean Christopherson
  2024-04-20  0:05 ` [PATCH v2 1/2] cpu: Re-enable CPU mitigations by default for !X86 architectures Sean Christopherson
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Sean Christopherson @ 2024-04-20  0:05 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
	Peter Zijlstra
  Cc: linux-kernel, Stephen Rothwell, Michael Ellerman,
	Geert Uytterhoeven, Josh Poimboeuf, Will Deacon, Linus Torvalds,
	Sean Christopherson

Linus, I Cc'd you on this as patch 1 fixes a goof that causes mitigations
to be completely disabled on all !x86 architectures, and it'd be nice to
fix that in rc5.  There was a decent bit of discussion on how exactly to
juggle the Kconfigs, and so I don't expect anyone to include this in a pull
request for rc5.

The discussion didn't fully resolve, i.e. this hasn't gotten a thumbs up
from the affected parties, but I think/hope my approach here is minimal
enough for other architectures (just restores previous behavior), and
shouldn't result in a huge amount of churn if we decide to go in a
different direction.

TL;DR: please grab patch 1 directly if you think it's worth squeezing into
rc5, and isn't completely crazy.

Thanks!


Patch 2 is probably 6.9 material, but is definitely not rc5 material.  It
disallows retroactively enabling mitigations via command line if the kernel
was built with CPU_MITIGATIONS=n, as it's infeasible for x86 to provide
sane, predictable behavior for this scenario.

v2:
 - Rework the Kconfigs so that there's a single user-visible CPU_MITIGATION
   config. [Everyone]
 - Define CPU_MITIGATIONS in arch/Kconfig. [Josh]
 - Completely compile out the cpu_mitigations code if CPU_MITIGATIONS=n,
   e.g. to make impossible to end up in a half-baked state where
   cpu_mitigations ends up enabled but the kernel wasn't compiled with
   mitigations enabled.

v1: https://lore.kernel.org/all/20240417001507.2264512-1-seanjc@google.com

Sean Christopherson (2):
  cpu: Re-enable CPU mitigations by default for !X86 architectures
  cpu: Ignore "mitigations" kernel parameter if CPU_MITIGATIONS=n

 .../admin-guide/kernel-parameters.txt         |  3 +++
 arch/Kconfig                                  |  8 ++++++++
 arch/x86/Kconfig                              | 19 ++++++++++++-------
 include/linux/cpu.h                           | 11 +++++++++++
 kernel/cpu.c                                  | 13 ++++++++++---
 5 files changed, 44 insertions(+), 10 deletions(-)


base-commit: 96fca68c4fbf77a8185eb10f7557e23352732ea2
-- 
2.44.0.769.g3c40516874-goog


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH v2 1/2] cpu: Re-enable CPU mitigations by default for !X86 architectures
  2024-04-20  0:05 [PATCH v2 0/2] cpu: Fix default mitigation behavior Sean Christopherson
@ 2024-04-20  0:05 ` Sean Christopherson
  2024-04-24  5:38   ` Josh Poimboeuf
  2024-04-25 14:18   ` [tip: x86/urgent] " tip-bot2 for Sean Christopherson
  2024-04-20  0:05 ` [PATCH v2 2/2] cpu: Ignore "mitigations" kernel parameter if CPU_MITIGATIONS=n Sean Christopherson
  2024-04-20 13:33 ` [PATCH v2 0/2] cpu: Fix default mitigation behavior Borislav Petkov
  2 siblings, 2 replies; 11+ messages in thread
From: Sean Christopherson @ 2024-04-20  0:05 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
	Peter Zijlstra
  Cc: linux-kernel, Stephen Rothwell, Michael Ellerman,
	Geert Uytterhoeven, Josh Poimboeuf, Will Deacon, Linus Torvalds,
	Sean Christopherson

Rename x86's to CPU_MITIGATIONS, define it in generic code, and force it
on for all architectures exception x86.  A recent commit to turn
mitigations off by default if SPECULATION_MITIGATIONS=n kinda sorta missed
that "cpu_mitigations" is completely generic, whereas
SPECULATION_MITIGATIONS is x86 specific.

Rename x86's SPECULATIVE_MITIGATIONS instead of keeping both and have it
select CPU_MITIGATIONS, as having two configs for the same thing is
unnecessary and confusing.  This will also allow x86 to use the knob to
manage mitigations that aren't strictly related to speculative execution.

Use another Kconfig to communicate to common code that CPU_MITIGATIONS is
already defined instead of having x86's menu depend on the common
CPU_MITIGATIONS.  This allows keeping a single point of contact for all of
x86's mitigations, and it's not clear that other architectures *want* to
allow disabling mitigations at compile-time.

Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
Reported-by: Michael Ellerman <mpe@ellerman.id.au>
Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Closes: https://lkml.kernel.org/r/20240413115324.53303a68%40canb.auug.org.au
Fixes: f337a6a21e2f ("x86/cpu: Actually turn off mitigations by default for SPECULATION_MITIGATIONS=n")
Cc: Josh Poimboeuf <jpoimboe@kernel.org>
Cc: Will Deacon <will@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: stable@vger.kernel.org
Signed-off-by: Sean Christopherson <seanjc@google.com>
---
 arch/Kconfig     |  8 ++++++++
 arch/x86/Kconfig | 11 ++++++-----
 kernel/cpu.c     |  4 ++--
 3 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/arch/Kconfig b/arch/Kconfig
index 65afb1de48b3..30f7930275d8 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -9,6 +9,14 @@
 #
 source "arch/$(SRCARCH)/Kconfig"
 
+config ARCH_CONFIGURES_CPU_MITIGATIONS
+	bool
+
+if !ARCH_CONFIGURES_CPU_MITIGATIONS
+config CPU_MITIGATIONS
+	def_bool y
+endif
+
 menu "General architecture-dependent options"
 
 config ARCH_HAS_SUBPAGE_FAULTS
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 4474bf32d0a4..619a04d5c131 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -62,6 +62,7 @@ config X86
 	select ACPI_HOTPLUG_CPU			if ACPI_PROCESSOR && HOTPLUG_CPU
 	select ARCH_32BIT_OFF_T			if X86_32
 	select ARCH_CLOCKSOURCE_INIT
+	select ARCH_CONFIGURES_CPU_MITIGATIONS
 	select ARCH_CORRECT_STACKTRACE_ON_KRETPROBE
 	select ARCH_ENABLE_HUGEPAGE_MIGRATION if X86_64 && HUGETLB_PAGE && MIGRATION
 	select ARCH_ENABLE_MEMORY_HOTPLUG if X86_64
@@ -2488,17 +2489,17 @@ config PREFIX_SYMBOLS
 	def_bool y
 	depends on CALL_PADDING && !CFI_CLANG
 
-menuconfig SPECULATION_MITIGATIONS
-	bool "Mitigations for speculative execution vulnerabilities"
+menuconfig CPU_MITIGATIONS
+	bool "Mitigations for CPU vulnerabilities"
 	default y
 	help
-	  Say Y here to enable options which enable mitigations for
-	  speculative execution hardware vulnerabilities.
+	  Say Y here to enable options which enable mitigations for hardware
+	  vulnerabilities (usually related to speculative execution).
 
 	  If you say N, all mitigations will be disabled. You really
 	  should know what you are doing to say so.
 
-if SPECULATION_MITIGATIONS
+if CPU_MITIGATIONS
 
 config MITIGATION_PAGE_TABLE_ISOLATION
 	bool "Remove the kernel mapping in user mode"
diff --git a/kernel/cpu.c b/kernel/cpu.c
index 07ad53b7f119..bb0ff275fb46 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -3207,8 +3207,8 @@ enum cpu_mitigations {
 };
 
 static enum cpu_mitigations cpu_mitigations __ro_after_init =
-	IS_ENABLED(CONFIG_SPECULATION_MITIGATIONS) ? CPU_MITIGATIONS_AUTO :
-						     CPU_MITIGATIONS_OFF;
+	IS_ENABLED(CONFIG_CPU_MITIGATIONS) ? CPU_MITIGATIONS_AUTO :
+					     CPU_MITIGATIONS_OFF;
 
 static int __init mitigations_parse_cmdline(char *arg)
 {
-- 
2.44.0.769.g3c40516874-goog


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH v2 2/2] cpu: Ignore "mitigations" kernel parameter if CPU_MITIGATIONS=n
  2024-04-20  0:05 [PATCH v2 0/2] cpu: Fix default mitigation behavior Sean Christopherson
  2024-04-20  0:05 ` [PATCH v2 1/2] cpu: Re-enable CPU mitigations by default for !X86 architectures Sean Christopherson
@ 2024-04-20  0:05 ` Sean Christopherson
  2024-04-20 13:36   ` Borislav Petkov
                     ` (2 more replies)
  2024-04-20 13:33 ` [PATCH v2 0/2] cpu: Fix default mitigation behavior Borislav Petkov
  2 siblings, 3 replies; 11+ messages in thread
From: Sean Christopherson @ 2024-04-20  0:05 UTC (permalink / raw)
  To: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
	Peter Zijlstra
  Cc: linux-kernel, Stephen Rothwell, Michael Ellerman,
	Geert Uytterhoeven, Josh Poimboeuf, Will Deacon, Linus Torvalds,
	Sean Christopherson

Explicitly disallow enabling mitigations at runtime for kernels that were
built with CONFIG_CPU_MITIGATIONS=n, as some architectures may omit code
entirely if mitigations are disabled at compile time.

E.g. on x86, a large pile of Kconfigs are buried behind CPU_MITIGATIONS,
and trying to provide sane behavior for retroactively enabling mitigations
is extremely difficult, bordering on impossible.  E.g. page table isolation
and call depth tracking requrie build-time support, BHI mitigations will
still be off without additional kernel parameters, etc.

Signed-off-by: Sean Christopherson <seanjc@google.com>
---
 Documentation/admin-guide/kernel-parameters.txt |  3 +++
 arch/x86/Kconfig                                |  8 ++++++--
 include/linux/cpu.h                             | 11 +++++++++++
 kernel/cpu.c                                    | 13 ++++++++++---
 4 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index 902ecd92a29f..213d0719e2b7 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -3423,6 +3423,9 @@
 			arch-independent options, each of which is an
 			aggregation of existing arch-specific options.
 
+			Note, "mitigations" is supported if and only if the
+			kernel was built with CPU_MITIGATIONS=y.
+
 			off
 				Disable all optional CPU mitigations.  This
 				improves system performance, but it may also
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 619a04d5c131..928820e61cb5 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -2495,9 +2495,13 @@ menuconfig CPU_MITIGATIONS
 	help
 	  Say Y here to enable options which enable mitigations for hardware
 	  vulnerabilities (usually related to speculative execution).
+	  Mitigations can be disabled or restricted to SMT systems at runtime
+	  via the "mitigations" kernel parameter.
 
-	  If you say N, all mitigations will be disabled. You really
-	  should know what you are doing to say so.
+	  If you say N, all mitigations will be disabled.  This CANNOT be
+	  overridden at runtime.
+
+	  Say 'Y', unless you really know what you are doing.
 
 if CPU_MITIGATIONS
 
diff --git a/include/linux/cpu.h b/include/linux/cpu.h
index 272e4e79e15c..ee0a3b4e0769 100644
--- a/include/linux/cpu.h
+++ b/include/linux/cpu.h
@@ -221,7 +221,18 @@ void cpuhp_report_idle_dead(void);
 static inline void cpuhp_report_idle_dead(void) { }
 #endif /* #ifdef CONFIG_HOTPLUG_CPU */
 
+#ifdef CONFIG_CPU_MITIGATIONS
 extern bool cpu_mitigations_off(void);
 extern bool cpu_mitigations_auto_nosmt(void);
+#else
+static inline bool cpu_mitigations_off(void)
+{
+	return false;
+}
+static inline bool cpu_mitigations_auto_nosmt(void)
+{
+	return false;
+}
+#endif
 
 #endif /* _LINUX_CPU_H_ */
diff --git a/kernel/cpu.c b/kernel/cpu.c
index bb0ff275fb46..24235c1d6e82 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -3196,6 +3196,7 @@ void __init boot_cpu_hotplug_init(void)
 	this_cpu_write(cpuhp_state.target, CPUHP_ONLINE);
 }
 
+#ifdef CONFIG_CPU_MITIGATIONS
 /*
  * These are used for a global "mitigations=" cmdline option for toggling
  * optional CPU mitigations.
@@ -3207,8 +3208,7 @@ enum cpu_mitigations {
 };
 
 static enum cpu_mitigations cpu_mitigations __ro_after_init =
-	IS_ENABLED(CONFIG_CPU_MITIGATIONS) ? CPU_MITIGATIONS_AUTO :
-					     CPU_MITIGATIONS_OFF;
+	CPU_MITIGATIONS_AUTO;
 
 static int __init mitigations_parse_cmdline(char *arg)
 {
@@ -3224,7 +3224,6 @@ static int __init mitigations_parse_cmdline(char *arg)
 
 	return 0;
 }
-early_param("mitigations", mitigations_parse_cmdline);
 
 /* mitigations=off */
 bool cpu_mitigations_off(void)
@@ -3239,3 +3238,11 @@ bool cpu_mitigations_auto_nosmt(void)
 	return cpu_mitigations == CPU_MITIGATIONS_AUTO_NOSMT;
 }
 EXPORT_SYMBOL_GPL(cpu_mitigations_auto_nosmt);
+#else
+static int __init mitigations_parse_cmdline(char *arg)
+{
+	pr_crit("Kernel compiled without mitigations, ignoring 'mitigations'; system may still be vulnerable\n");
+	return 0;
+}
+#endif
+early_param("mitigations", mitigations_parse_cmdline);
-- 
2.44.0.769.g3c40516874-goog


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 0/2] cpu: Fix default mitigation behavior
  2024-04-20  0:05 [PATCH v2 0/2] cpu: Fix default mitigation behavior Sean Christopherson
  2024-04-20  0:05 ` [PATCH v2 1/2] cpu: Re-enable CPU mitigations by default for !X86 architectures Sean Christopherson
  2024-04-20  0:05 ` [PATCH v2 2/2] cpu: Ignore "mitigations" kernel parameter if CPU_MITIGATIONS=n Sean Christopherson
@ 2024-04-20 13:33 ` Borislav Petkov
  2 siblings, 0 replies; 11+ messages in thread
From: Borislav Petkov @ 2024-04-20 13:33 UTC (permalink / raw)
  To: Sean Christopherson
  Cc: Thomas Gleixner, Ingo Molnar, Dave Hansen, x86, Peter Zijlstra,
	linux-kernel, Stephen Rothwell, Michael Ellerman,
	Geert Uytterhoeven, Josh Poimboeuf, Will Deacon, Linus Torvalds

On Fri, Apr 19, 2024 at 05:05:53PM -0700, Sean Christopherson wrote:
> Linus, I Cc'd you on this as patch 1 fixes a goof that causes mitigations
> to be completely disabled on all !x86 architectures, and it'd be nice to
> fix that in rc5.  There was a decent bit of discussion on how exactly to
> juggle the Kconfigs, and so I don't expect anyone to include this in a pull
> request for rc5.
> 
> The discussion didn't fully resolve, i.e. this hasn't gotten a thumbs up
> from the affected parties, but I think/hope my approach here is minimal
> enough for other architectures (just restores previous behavior), and
> shouldn't result in a huge amount of churn if we decide to go in a
> different direction.
> 
> TL;DR: please grab patch 1 directly if you think it's worth squeezing into
> rc5, and isn't completely crazy.

Agreed, we should have some sort of fix for -rc5.

And I don't see anything wrong with it and the aspect that other arches
should get their previous behavior for now makes sense. And we can
always bikeshed this at large until it is settled.

So patch 1:

Acked-by: Borislav Petkov (AMD) <bp@alien8.de>

Thx.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] cpu: Ignore "mitigations" kernel parameter if CPU_MITIGATIONS=n
  2024-04-20  0:05 ` [PATCH v2 2/2] cpu: Ignore "mitigations" kernel parameter if CPU_MITIGATIONS=n Sean Christopherson
@ 2024-04-20 13:36   ` Borislav Petkov
  2024-04-24  5:39   ` Josh Poimboeuf
  2024-04-25 14:18   ` [tip: x86/urgent] " tip-bot2 for Sean Christopherson
  2 siblings, 0 replies; 11+ messages in thread
From: Borislav Petkov @ 2024-04-20 13:36 UTC (permalink / raw)
  To: Sean Christopherson
  Cc: Thomas Gleixner, Ingo Molnar, Dave Hansen, x86, Peter Zijlstra,
	linux-kernel, Stephen Rothwell, Michael Ellerman,
	Geert Uytterhoeven, Josh Poimboeuf, Will Deacon, Linus Torvalds

On Fri, Apr 19, 2024 at 05:05:55PM -0700, Sean Christopherson wrote:
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index 619a04d5c131..928820e61cb5 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -2495,9 +2495,13 @@ menuconfig CPU_MITIGATIONS
>  	help
>  	  Say Y here to enable options which enable mitigations for hardware
>  	  vulnerabilities (usually related to speculative execution).
> +	  Mitigations can be disabled or restricted to SMT systems at runtime
> +	  via the "mitigations" kernel parameter.
>  
> -	  If you say N, all mitigations will be disabled. You really
> -	  should know what you are doing to say so.
> +	  If you say N, all mitigations will be disabled.  This CANNOT be
> +	  overridden at runtime.

You probably wanna highlight the fact here that saying N means it'll
simply not even build in the mitigations code, leading to the physical
inability :) to enable them later, at run time.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 1/2] cpu: Re-enable CPU mitigations by default for !X86 architectures
  2024-04-20  0:05 ` [PATCH v2 1/2] cpu: Re-enable CPU mitigations by default for !X86 architectures Sean Christopherson
@ 2024-04-24  5:38   ` Josh Poimboeuf
  2024-04-25 14:18   ` [tip: x86/urgent] " tip-bot2 for Sean Christopherson
  1 sibling, 0 replies; 11+ messages in thread
From: Josh Poimboeuf @ 2024-04-24  5:38 UTC (permalink / raw)
  To: Sean Christopherson
  Cc: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
	Peter Zijlstra, linux-kernel, Stephen Rothwell, Michael Ellerman,
	Geert Uytterhoeven, Will Deacon, Linus Torvalds

On Fri, Apr 19, 2024 at 05:05:54PM -0700, Sean Christopherson wrote:
> Rename x86's to CPU_MITIGATIONS, define it in generic code, and force it
> on for all architectures exception x86.  A recent commit to turn
> mitigations off by default if SPECULATION_MITIGATIONS=n kinda sorta missed
> that "cpu_mitigations" is completely generic, whereas
> SPECULATION_MITIGATIONS is x86 specific.
> 
> Rename x86's SPECULATIVE_MITIGATIONS instead of keeping both and have it
> select CPU_MITIGATIONS, as having two configs for the same thing is
> unnecessary and confusing.  This will also allow x86 to use the knob to
> manage mitigations that aren't strictly related to speculative execution.
> 
> Use another Kconfig to communicate to common code that CPU_MITIGATIONS is
> already defined instead of having x86's menu depend on the common
> CPU_MITIGATIONS.  This allows keeping a single point of contact for all of
> x86's mitigations, and it's not clear that other architectures *want* to
> allow disabling mitigations at compile-time.
> 
> Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
> Reported-by: Michael Ellerman <mpe@ellerman.id.au>
> Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
> Closes: https://lkml.kernel.org/r/20240413115324.53303a68%40canb.auug.org.au
> Fixes: f337a6a21e2f ("x86/cpu: Actually turn off mitigations by default for SPECULATION_MITIGATIONS=n")
> Cc: Josh Poimboeuf <jpoimboe@kernel.org>
> Cc: Will Deacon <will@kernel.org>
> Cc: Linus Torvalds <torvalds@linux-foundation.org>
> Cc: stable@vger.kernel.org
> Signed-off-by: Sean Christopherson <seanjc@google.com>

Acked-by: Josh Poimboeuf <jpoimboe@kernel.org>

-- 
Josh

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] cpu: Ignore "mitigations" kernel parameter if CPU_MITIGATIONS=n
  2024-04-20  0:05 ` [PATCH v2 2/2] cpu: Ignore "mitigations" kernel parameter if CPU_MITIGATIONS=n Sean Christopherson
  2024-04-20 13:36   ` Borislav Petkov
@ 2024-04-24  5:39   ` Josh Poimboeuf
  2024-04-24 13:42     ` Borislav Petkov
  2024-04-25 14:18   ` [tip: x86/urgent] " tip-bot2 for Sean Christopherson
  2 siblings, 1 reply; 11+ messages in thread
From: Josh Poimboeuf @ 2024-04-24  5:39 UTC (permalink / raw)
  To: Sean Christopherson
  Cc: Thomas Gleixner, Ingo Molnar, Borislav Petkov, Dave Hansen, x86,
	Peter Zijlstra, linux-kernel, Stephen Rothwell, Michael Ellerman,
	Geert Uytterhoeven, Will Deacon, Linus Torvalds

On Fri, Apr 19, 2024 at 05:05:55PM -0700, Sean Christopherson wrote:
> +#ifdef CONFIG_CPU_MITIGATIONS
>  extern bool cpu_mitigations_off(void);
>  extern bool cpu_mitigations_auto_nosmt(void);
> +#else
> +static inline bool cpu_mitigations_off(void)
> +{
> +	return false;
> +}

This should probably return true?

-- 
Josh

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] cpu: Ignore "mitigations" kernel parameter if CPU_MITIGATIONS=n
  2024-04-24  5:39   ` Josh Poimboeuf
@ 2024-04-24 13:42     ` Borislav Petkov
  2024-04-24 15:48       ` Sean Christopherson
  0 siblings, 1 reply; 11+ messages in thread
From: Borislav Petkov @ 2024-04-24 13:42 UTC (permalink / raw)
  To: Josh Poimboeuf
  Cc: Sean Christopherson, Thomas Gleixner, Ingo Molnar, Dave Hansen,
	x86, Peter Zijlstra, linux-kernel, Stephen Rothwell,
	Michael Ellerman, Geert Uytterhoeven, Will Deacon, Linus Torvalds

On Tue, Apr 23, 2024 at 10:39:40PM -0700, Josh Poimboeuf wrote:
> On Fri, Apr 19, 2024 at 05:05:55PM -0700, Sean Christopherson wrote:
> > +#ifdef CONFIG_CPU_MITIGATIONS
> >  extern bool cpu_mitigations_off(void);
> >  extern bool cpu_mitigations_auto_nosmt(void);
> > +#else
> > +static inline bool cpu_mitigations_off(void)
> > +{
> > +	return false;
> > +}
> 
> This should probably return true?

Right, I'll fix it up while applying and send them linuswards this
weekend so that 6.9 releases fixed.

Thx.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH v2 2/2] cpu: Ignore "mitigations" kernel parameter if CPU_MITIGATIONS=n
  2024-04-24 13:42     ` Borislav Petkov
@ 2024-04-24 15:48       ` Sean Christopherson
  0 siblings, 0 replies; 11+ messages in thread
From: Sean Christopherson @ 2024-04-24 15:48 UTC (permalink / raw)
  To: Borislav Petkov
  Cc: Josh Poimboeuf, Thomas Gleixner, Ingo Molnar, Dave Hansen, x86,
	Peter Zijlstra, linux-kernel, Stephen Rothwell, Michael Ellerman,
	Geert Uytterhoeven, Will Deacon, Linus Torvalds

On Wed, Apr 24, 2024, Borislav Petkov wrote:
> On Tue, Apr 23, 2024 at 10:39:40PM -0700, Josh Poimboeuf wrote:
> > On Fri, Apr 19, 2024 at 05:05:55PM -0700, Sean Christopherson wrote:
> > > +#ifdef CONFIG_CPU_MITIGATIONS
> > >  extern bool cpu_mitigations_off(void);
> > >  extern bool cpu_mitigations_auto_nosmt(void);
> > > +#else
> > > +static inline bool cpu_mitigations_off(void)
> > > +{
> > > +	return false;
> > > +}
> > 
> > This should probably return true?

/facepalm

Glad you were paying attention, as I was clearly not.  I double checked that
flipping that to true does indeed force off mitigations.

> Right, I'll fix it up while applying and send them linuswards this
> weekend so that 6.9 releases fixed.

Thanks!

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [tip: x86/urgent] cpu: Re-enable CPU mitigations by default for !X86 architectures
  2024-04-20  0:05 ` [PATCH v2 1/2] cpu: Re-enable CPU mitigations by default for !X86 architectures Sean Christopherson
  2024-04-24  5:38   ` Josh Poimboeuf
@ 2024-04-25 14:18   ` tip-bot2 for Sean Christopherson
  1 sibling, 0 replies; 11+ messages in thread
From: tip-bot2 for Sean Christopherson @ 2024-04-25 14:18 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Stephen Rothwell, Michael Ellerman, Geert Uytterhoeven,
	Sean Christopherson, Borislav Petkov (AMD), Josh Poimboeuf,
	stable, x86, linux-kernel

The following commit has been merged into the x86/urgent branch of tip:

Commit-ID:     fe42754b94a42d08cf9501790afc25c4f6a5f631
Gitweb:        https://git.kernel.org/tip/fe42754b94a42d08cf9501790afc25c4f6a5f631
Author:        Sean Christopherson <seanjc@google.com>
AuthorDate:    Fri, 19 Apr 2024 17:05:54 -07:00
Committer:     Borislav Petkov (AMD) <bp@alien8.de>
CommitterDate: Thu, 25 Apr 2024 15:47:35 +02:00

cpu: Re-enable CPU mitigations by default for !X86 architectures

Rename x86's to CPU_MITIGATIONS, define it in generic code, and force it
on for all architectures exception x86.  A recent commit to turn
mitigations off by default if SPECULATION_MITIGATIONS=n kinda sorta
missed that "cpu_mitigations" is completely generic, whereas
SPECULATION_MITIGATIONS is x86-specific.

Rename x86's SPECULATIVE_MITIGATIONS instead of keeping both and have it
select CPU_MITIGATIONS, as having two configs for the same thing is
unnecessary and confusing.  This will also allow x86 to use the knob to
manage mitigations that aren't strictly related to speculative
execution.

Use another Kconfig to communicate to common code that CPU_MITIGATIONS
is already defined instead of having x86's menu depend on the common
CPU_MITIGATIONS.  This allows keeping a single point of contact for all
of x86's mitigations, and it's not clear that other architectures *want*
to allow disabling mitigations at compile-time.

Fixes: f337a6a21e2f ("x86/cpu: Actually turn off mitigations by default for SPECULATION_MITIGATIONS=n")
Closes: https://lkml.kernel.org/r/20240413115324.53303a68%40canb.auug.org.au
Reported-by: Stephen Rothwell <sfr@canb.auug.org.au>
Reported-by: Michael Ellerman <mpe@ellerman.id.au>
Reported-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Acked-by: Josh Poimboeuf <jpoimboe@kernel.org>
Acked-by: Borislav Petkov (AMD) <bp@alien8.de>
Cc: stable@vger.kernel.org
Link: https://lore.kernel.org/r/20240420000556.2645001-2-seanjc@google.com
---
 arch/Kconfig     |  8 ++++++++
 arch/x86/Kconfig | 11 ++++++-----
 kernel/cpu.c     |  4 ++--
 3 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/arch/Kconfig b/arch/Kconfig
index 65afb1d..30f7930 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -9,6 +9,14 @@
 #
 source "arch/$(SRCARCH)/Kconfig"
 
+config ARCH_CONFIGURES_CPU_MITIGATIONS
+	bool
+
+if !ARCH_CONFIGURES_CPU_MITIGATIONS
+config CPU_MITIGATIONS
+	def_bool y
+endif
+
 menu "General architecture-dependent options"
 
 config ARCH_HAS_SUBPAGE_FAULTS
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 4474bf3..619a04d 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -62,6 +62,7 @@ config X86
 	select ACPI_HOTPLUG_CPU			if ACPI_PROCESSOR && HOTPLUG_CPU
 	select ARCH_32BIT_OFF_T			if X86_32
 	select ARCH_CLOCKSOURCE_INIT
+	select ARCH_CONFIGURES_CPU_MITIGATIONS
 	select ARCH_CORRECT_STACKTRACE_ON_KRETPROBE
 	select ARCH_ENABLE_HUGEPAGE_MIGRATION if X86_64 && HUGETLB_PAGE && MIGRATION
 	select ARCH_ENABLE_MEMORY_HOTPLUG if X86_64
@@ -2488,17 +2489,17 @@ config PREFIX_SYMBOLS
 	def_bool y
 	depends on CALL_PADDING && !CFI_CLANG
 
-menuconfig SPECULATION_MITIGATIONS
-	bool "Mitigations for speculative execution vulnerabilities"
+menuconfig CPU_MITIGATIONS
+	bool "Mitigations for CPU vulnerabilities"
 	default y
 	help
-	  Say Y here to enable options which enable mitigations for
-	  speculative execution hardware vulnerabilities.
+	  Say Y here to enable options which enable mitigations for hardware
+	  vulnerabilities (usually related to speculative execution).
 
 	  If you say N, all mitigations will be disabled. You really
 	  should know what you are doing to say so.
 
-if SPECULATION_MITIGATIONS
+if CPU_MITIGATIONS
 
 config MITIGATION_PAGE_TABLE_ISOLATION
 	bool "Remove the kernel mapping in user mode"
diff --git a/kernel/cpu.c b/kernel/cpu.c
index 07ad53b..bb0ff27 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -3207,8 +3207,8 @@ enum cpu_mitigations {
 };
 
 static enum cpu_mitigations cpu_mitigations __ro_after_init =
-	IS_ENABLED(CONFIG_SPECULATION_MITIGATIONS) ? CPU_MITIGATIONS_AUTO :
-						     CPU_MITIGATIONS_OFF;
+	IS_ENABLED(CONFIG_CPU_MITIGATIONS) ? CPU_MITIGATIONS_AUTO :
+					     CPU_MITIGATIONS_OFF;
 
 static int __init mitigations_parse_cmdline(char *arg)
 {

^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [tip: x86/urgent] cpu: Ignore "mitigations" kernel parameter if CPU_MITIGATIONS=n
  2024-04-20  0:05 ` [PATCH v2 2/2] cpu: Ignore "mitigations" kernel parameter if CPU_MITIGATIONS=n Sean Christopherson
  2024-04-20 13:36   ` Borislav Petkov
  2024-04-24  5:39   ` Josh Poimboeuf
@ 2024-04-25 14:18   ` tip-bot2 for Sean Christopherson
  2 siblings, 0 replies; 11+ messages in thread
From: tip-bot2 for Sean Christopherson @ 2024-04-25 14:18 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: Sean Christopherson, Borislav Petkov (AMD), x86, linux-kernel

The following commit has been merged into the x86/urgent branch of tip:

Commit-ID:     ce0abef6a1d540acef85068e0e82bdf1fbeeb0e9
Gitweb:        https://git.kernel.org/tip/ce0abef6a1d540acef85068e0e82bdf1fbeeb0e9
Author:        Sean Christopherson <seanjc@google.com>
AuthorDate:    Fri, 19 Apr 2024 17:05:55 -07:00
Committer:     Borislav Petkov (AMD) <bp@alien8.de>
CommitterDate: Thu, 25 Apr 2024 15:47:39 +02:00

cpu: Ignore "mitigations" kernel parameter if CPU_MITIGATIONS=n

Explicitly disallow enabling mitigations at runtime for kernels that were
built with CONFIG_CPU_MITIGATIONS=n, as some architectures may omit code
entirely if mitigations are disabled at compile time.

E.g. on x86, a large pile of Kconfigs are buried behind CPU_MITIGATIONS,
and trying to provide sane behavior for retroactively enabling mitigations
is extremely difficult, bordering on impossible.  E.g. page table isolation
and call depth tracking require build-time support, BHI mitigations will
still be off without additional kernel parameters, etc.

  [ bp: Touchups. ]

Signed-off-by: Sean Christopherson <seanjc@google.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Acked-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/r/20240420000556.2645001-3-seanjc@google.com
---
 Documentation/admin-guide/kernel-parameters.txt |  3 +++
 arch/x86/Kconfig                                |  8 ++++++--
 include/linux/cpu.h                             | 11 +++++++++++
 kernel/cpu.c                                    | 14 ++++++++++----
 4 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index 902ecd9..213d071 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -3423,6 +3423,9 @@
 			arch-independent options, each of which is an
 			aggregation of existing arch-specific options.
 
+			Note, "mitigations" is supported if and only if the
+			kernel was built with CPU_MITIGATIONS=y.
+
 			off
 				Disable all optional CPU mitigations.  This
 				improves system performance, but it may also
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 619a04d..928820e 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -2495,9 +2495,13 @@ menuconfig CPU_MITIGATIONS
 	help
 	  Say Y here to enable options which enable mitigations for hardware
 	  vulnerabilities (usually related to speculative execution).
+	  Mitigations can be disabled or restricted to SMT systems at runtime
+	  via the "mitigations" kernel parameter.
 
-	  If you say N, all mitigations will be disabled. You really
-	  should know what you are doing to say so.
+	  If you say N, all mitigations will be disabled.  This CANNOT be
+	  overridden at runtime.
+
+	  Say 'Y', unless you really know what you are doing.
 
 if CPU_MITIGATIONS
 
diff --git a/include/linux/cpu.h b/include/linux/cpu.h
index 272e4e7..861c3bf 100644
--- a/include/linux/cpu.h
+++ b/include/linux/cpu.h
@@ -221,7 +221,18 @@ void cpuhp_report_idle_dead(void);
 static inline void cpuhp_report_idle_dead(void) { }
 #endif /* #ifdef CONFIG_HOTPLUG_CPU */
 
+#ifdef CONFIG_CPU_MITIGATIONS
 extern bool cpu_mitigations_off(void);
 extern bool cpu_mitigations_auto_nosmt(void);
+#else
+static inline bool cpu_mitigations_off(void)
+{
+	return true;
+}
+static inline bool cpu_mitigations_auto_nosmt(void)
+{
+	return false;
+}
+#endif
 
 #endif /* _LINUX_CPU_H_ */
diff --git a/kernel/cpu.c b/kernel/cpu.c
index bb0ff27..63447eb 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -3196,6 +3196,7 @@ void __init boot_cpu_hotplug_init(void)
 	this_cpu_write(cpuhp_state.target, CPUHP_ONLINE);
 }
 
+#ifdef CONFIG_CPU_MITIGATIONS
 /*
  * These are used for a global "mitigations=" cmdline option for toggling
  * optional CPU mitigations.
@@ -3206,9 +3207,7 @@ enum cpu_mitigations {
 	CPU_MITIGATIONS_AUTO_NOSMT,
 };
 
-static enum cpu_mitigations cpu_mitigations __ro_after_init =
-	IS_ENABLED(CONFIG_CPU_MITIGATIONS) ? CPU_MITIGATIONS_AUTO :
-					     CPU_MITIGATIONS_OFF;
+static enum cpu_mitigations cpu_mitigations __ro_after_init = CPU_MITIGATIONS_AUTO;
 
 static int __init mitigations_parse_cmdline(char *arg)
 {
@@ -3224,7 +3223,6 @@ static int __init mitigations_parse_cmdline(char *arg)
 
 	return 0;
 }
-early_param("mitigations", mitigations_parse_cmdline);
 
 /* mitigations=off */
 bool cpu_mitigations_off(void)
@@ -3239,3 +3237,11 @@ bool cpu_mitigations_auto_nosmt(void)
 	return cpu_mitigations == CPU_MITIGATIONS_AUTO_NOSMT;
 }
 EXPORT_SYMBOL_GPL(cpu_mitigations_auto_nosmt);
+#else
+static int __init mitigations_parse_cmdline(char *arg)
+{
+	pr_crit("Kernel compiled without mitigations, ignoring 'mitigations'; system may still be vulnerable\n");
+	return 0;
+}
+#endif
+early_param("mitigations", mitigations_parse_cmdline);

^ permalink raw reply related	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2024-04-25 14:18 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-20  0:05 [PATCH v2 0/2] cpu: Fix default mitigation behavior Sean Christopherson
2024-04-20  0:05 ` [PATCH v2 1/2] cpu: Re-enable CPU mitigations by default for !X86 architectures Sean Christopherson
2024-04-24  5:38   ` Josh Poimboeuf
2024-04-25 14:18   ` [tip: x86/urgent] " tip-bot2 for Sean Christopherson
2024-04-20  0:05 ` [PATCH v2 2/2] cpu: Ignore "mitigations" kernel parameter if CPU_MITIGATIONS=n Sean Christopherson
2024-04-20 13:36   ` Borislav Petkov
2024-04-24  5:39   ` Josh Poimboeuf
2024-04-24 13:42     ` Borislav Petkov
2024-04-24 15:48       ` Sean Christopherson
2024-04-25 14:18   ` [tip: x86/urgent] " tip-bot2 for Sean Christopherson
2024-04-20 13:33 ` [PATCH v2 0/2] cpu: Fix default mitigation behavior Borislav Petkov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.