| From foo@baz Fri Mar 29 15:53:50 CET 2019 |
| From: Michael Ellerman <mpe@ellerman.id.au> |
| Date: Fri, 29 Mar 2019 22:26:12 +1100 |
| Subject: powerpc/fsl: Add nospectre_v2 command line argument |
| To: stable@vger.kernel.org, gregkh@linuxfoundation.org |
| Cc: linuxppc-dev@ozlabs.org, diana.craciun@nxp.com, msuchanek@suse.de, christophe.leroy@c-s.fr |
| Message-ID: <20190329112620.14489-25-mpe@ellerman.id.au> |
| |
| From: Diana Craciun <diana.craciun@nxp.com> |
| |
| commit f633a8ad636efb5d4bba1a047d4a0f1ef719aa06 upstream. |
| |
| When the command line argument is present, the Spectre variant 2 |
| mitigations are disabled. |
| |
| Signed-off-by: Diana Craciun <diana.craciun@nxp.com> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| arch/powerpc/include/asm/setup.h | 5 +++++ |
| arch/powerpc/kernel/security.c | 21 +++++++++++++++++++++ |
| 2 files changed, 26 insertions(+) |
| |
| --- a/arch/powerpc/include/asm/setup.h |
| +++ b/arch/powerpc/include/asm/setup.h |
| @@ -66,6 +66,11 @@ void do_barrier_nospec_fixups_range(bool |
| static inline void do_barrier_nospec_fixups_range(bool enable, void *start, void *end) { }; |
| #endif |
| |
| +#ifdef CONFIG_PPC_FSL_BOOK3E |
| +void setup_spectre_v2(void); |
| +#else |
| +static inline void setup_spectre_v2(void) {}; |
| +#endif |
| void do_btb_flush_fixups(void); |
| |
| #endif /* !__ASSEMBLY__ */ |
| --- a/arch/powerpc/kernel/security.c |
| +++ b/arch/powerpc/kernel/security.c |
| @@ -26,6 +26,10 @@ static enum count_cache_flush_type count |
| |
| bool barrier_nospec_enabled; |
| static bool no_nospec; |
| +static bool btb_flush_enabled; |
| +#ifdef CONFIG_PPC_FSL_BOOK3E |
| +static bool no_spectrev2; |
| +#endif |
| |
| static void enable_barrier_nospec(bool enable) |
| { |
| @@ -101,6 +105,23 @@ static __init int barrier_nospec_debugfs |
| device_initcall(barrier_nospec_debugfs_init); |
| #endif /* CONFIG_DEBUG_FS */ |
| |
| +#ifdef CONFIG_PPC_FSL_BOOK3E |
| +static int __init handle_nospectre_v2(char *p) |
| +{ |
| + no_spectrev2 = true; |
| + |
| + return 0; |
| +} |
| +early_param("nospectre_v2", handle_nospectre_v2); |
| +void setup_spectre_v2(void) |
| +{ |
| + if (no_spectrev2) |
| + do_btb_flush_fixups(); |
| + else |
| + btb_flush_enabled = true; |
| +} |
| +#endif /* CONFIG_PPC_FSL_BOOK3E */ |
| + |
| #ifdef CONFIG_PPC_BOOK3S_64 |
| ssize_t cpu_show_meltdown(struct device *dev, struct device_attribute *attr, char *buf) |
| { |