]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
powerpc/speculation: Support 'mitigations=' cmdline option
authorJosh Poimboeuf <jpoimboe@redhat.com>
Fri, 12 Apr 2019 20:39:30 +0000 (15:39 -0500)
committerThomas Gleixner <tglx@linutronix.de>
Wed, 17 Apr 2019 19:37:29 +0000 (21:37 +0200)
Configure powerpc CPU runtime speculation bug mitigations in accordance
with the 'mitigations=' cmdline option.  This affects Meltdown, Spectre
v1, Spectre v2, and Speculative Store Bypass.

The default behavior is unchanged.

Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Jiri Kosina <jkosina@suse.cz> (on x86)
Reviewed-by: Jiri Kosina <jkosina@suse.cz>
Cc: Borislav Petkov <bp@alien8.de>
Cc: "H . Peter Anvin" <hpa@zytor.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Jiri Kosina <jikos@kernel.org>
Cc: Waiman Long <longman@redhat.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Jon Masters <jcm@redhat.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: linuxppc-dev@lists.ozlabs.org
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: linux-s390@vger.kernel.org
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will.deacon@arm.com>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linux-arch@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Tyler Hicks <tyhicks@canonical.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Randy Dunlap <rdunlap@infradead.org>
Cc: Steven Price <steven.price@arm.com>
Cc: Phil Auld <pauld@redhat.com>
Link: https://lkml.kernel.org/r/245a606e1a42a558a310220312d9b6adb9159df6.1555085500.git.jpoimboe@redhat.com
Documentation/admin-guide/kernel-parameters.txt
arch/powerpc/kernel/security.c
arch/powerpc/kernel/setup_64.c

index 779ddeb2929cc0342b9905aeadbe49d6b3611416..ac7150a25a7a15fa0fcc7f0a1a88000ccd37bcd1 100644 (file)
                        http://repo.or.cz/w/linux-2.6/mini2440.git
 
        mitigations=
                        http://repo.or.cz/w/linux-2.6/mini2440.git
 
        mitigations=
-                       [X86] Control optional mitigations for CPU
+                       [X86,PPC] Control optional mitigations for CPU
                        vulnerabilities.  This is a set of curated,
                        arch-independent options, each of which is an
                        aggregation of existing arch-specific options.
                        vulnerabilities.  This is a set of curated,
                        arch-independent options, each of which is an
                        aggregation of existing arch-specific options.
                                Disable all optional CPU mitigations.  This
                                improves system performance, but it may also
                                expose users to several CPU vulnerabilities.
                                Disable all optional CPU mitigations.  This
                                improves system performance, but it may also
                                expose users to several CPU vulnerabilities.
-                               Equivalent to: nopti [X86]
-                                              nospectre_v2 [X86]
+                               Equivalent to: nopti [X86,PPC]
+                                              nospectre_v1 [PPC]
+                                              nospectre_v2 [X86,PPC]
                                               spectre_v2_user=off [X86]
                                               spectre_v2_user=off [X86]
-                                              spec_store_bypass_disable=off [X86]
+                                              spec_store_bypass_disable=off [X86,PPC]
                                               l1tf=off [X86]
 
                        auto (default)
                                               l1tf=off [X86]
 
                        auto (default)
index 9b8631533e02a4559a4dfc4c23240db58e39192c..cdf3e73000e94d36698b9c760f2a9ca87d54ee15 100644 (file)
@@ -57,7 +57,7 @@ void setup_barrier_nospec(void)
        enable = security_ftr_enabled(SEC_FTR_FAVOUR_SECURITY) &&
                 security_ftr_enabled(SEC_FTR_BNDS_CHK_SPEC_BAR);
 
        enable = security_ftr_enabled(SEC_FTR_FAVOUR_SECURITY) &&
                 security_ftr_enabled(SEC_FTR_BNDS_CHK_SPEC_BAR);
 
-       if (!no_nospec)
+       if (!no_nospec && !cpu_mitigations_off())
                enable_barrier_nospec(enable);
 }
 
                enable_barrier_nospec(enable);
 }
 
@@ -116,7 +116,7 @@ static int __init handle_nospectre_v2(char *p)
 early_param("nospectre_v2", handle_nospectre_v2);
 void setup_spectre_v2(void)
 {
 early_param("nospectre_v2", handle_nospectre_v2);
 void setup_spectre_v2(void)
 {
-       if (no_spectrev2)
+       if (no_spectrev2 || cpu_mitigations_off())
                do_btb_flush_fixups();
        else
                btb_flush_enabled = true;
                do_btb_flush_fixups();
        else
                btb_flush_enabled = true;
@@ -307,7 +307,7 @@ void setup_stf_barrier(void)
 
        stf_enabled_flush_types = type;
 
 
        stf_enabled_flush_types = type;
 
-       if (!no_stf_barrier)
+       if (!no_stf_barrier && !cpu_mitigations_off())
                stf_barrier_enable(enable);
 }
 
                stf_barrier_enable(enable);
 }
 
index 236c1151a3a77057013313ed5da588673f5f3419..c7ec27ba8926a8b1a974e3c8cc56855467d35b70 100644 (file)
@@ -958,7 +958,7 @@ void setup_rfi_flush(enum l1d_flush_type types, bool enable)
 
        enabled_flush_types = types;
 
 
        enabled_flush_types = types;
 
-       if (!no_rfi_flush)
+       if (!no_rfi_flush && !cpu_mitigations_off())
                rfi_flush_enable(enable);
 }
 
                rfi_flush_enable(enable);
 }