All the mail mirrored from lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/6] powerpc/fsl: Speculation barrier for NXP PowerPC Book3E
@ 2018-07-13 13:52 Diana Craciun
  2018-07-13 13:52 ` [PATCH v3 1/6] powerpc/fsl: Disable the speculation barrier from the command line Diana Craciun
                   ` (5 more replies)
  0 siblings, 6 replies; 8+ messages in thread
From: Diana Craciun @ 2018-07-13 13:52 UTC (permalink / raw
  To: linuxppc-dev; +Cc: mpe, oss, leoyang.li, bharat.bhushan, Diana Craciun

Implement barrier_nospec for NXP PowerPC Book3E processors.

Diana Craciun (6):
  Disable the speculation barrier from the command line
  Document nospectre_v1 kernel parameter.
  Make stf barrier PPC_BOOK3S_64 specific.
  Enable cpu vulnerabilities reporting for NXP PPC BOOK3E
  Add barrier_nospec implementation for NXP PowerPC Book3E
  powerpc/fsl: Sanitize the syscall table for NXP PowerPC 32 bit
    platforms

 Documentation/admin-guide/kernel-parameters.txt |  4 +++
 arch/powerpc/Kconfig                            |  7 ++++-
 arch/powerpc/include/asm/barrier.h              | 12 ++++++---
 arch/powerpc/include/asm/setup.h                |  6 ++++-
 arch/powerpc/kernel/Makefile                    |  3 ++-
 arch/powerpc/kernel/entry_32.S                  | 10 +++++++
 arch/powerpc/kernel/module.c                    |  4 ++-
 arch/powerpc/kernel/security.c                  | 17 +++++++++++-
 arch/powerpc/kernel/setup-common.c              |  2 ++
 arch/powerpc/kernel/vmlinux.lds.S               |  4 ++-
 arch/powerpc/lib/feature-fixups.c               | 35 ++++++++++++++++++++++++-
 arch/powerpc/platforms/powernv/setup.c          |  1 -
 arch/powerpc/platforms/pseries/setup.c          |  1 -
 13 files changed, 94 insertions(+), 12 deletions(-)

--
History:

v2 --> v3
- addressed review comments
- included the 32bit sanitization in the same patch series

v1 --> v2
- added implementation for cpu_show_spectre_x functions
- the mitigation is no longer enabled through device tree options

2.5.5

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

* [PATCH v3 1/6] powerpc/fsl: Disable the speculation barrier from the command line
  2018-07-13 13:52 [PATCH v3 0/6] powerpc/fsl: Speculation barrier for NXP PowerPC Book3E Diana Craciun
@ 2018-07-13 13:52 ` Diana Craciun
  2018-07-13 13:52 ` [PATCH v3 2/6] powerpc/fsl: Document nospectre_v1 kernel parameter Diana Craciun
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Diana Craciun @ 2018-07-13 13:52 UTC (permalink / raw
  To: linuxppc-dev; +Cc: mpe, oss, leoyang.li, bharat.bhushan, Diana Craciun

The speculation barrier can be disabled from the command line
with the parameter: "nospectre_v1".

Signed-off-by: Diana Craciun <diana.craciun@nxp.com>
---
History:

v2-->v3
- no changes

 arch/powerpc/kernel/security.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/kernel/security.c b/arch/powerpc/kernel/security.c
index a8b2773..2ebfc5b 100644
--- a/arch/powerpc/kernel/security.c
+++ b/arch/powerpc/kernel/security.c
@@ -16,6 +16,7 @@
 unsigned long powerpc_security_features __read_mostly = SEC_FTR_DEFAULT;
 
 bool barrier_nospec_enabled;
+static bool no_nospec;
 
 static void enable_barrier_nospec(bool enable)
 {
@@ -42,9 +43,18 @@ void setup_barrier_nospec(void)
 	enable = security_ftr_enabled(SEC_FTR_FAVOUR_SECURITY) &&
 		 security_ftr_enabled(SEC_FTR_BNDS_CHK_SPEC_BAR);
 
-	enable_barrier_nospec(enable);
+	if (!no_nospec)
+		enable_barrier_nospec(enable);
 }
 
+static int __init handle_nospectre_v1(char *p)
+{
+	no_nospec = true;
+
+	return 0;
+}
+early_param("nospectre_v1", handle_nospectre_v1);
+
 #ifdef CONFIG_DEBUG_FS
 static int barrier_nospec_set(void *data, u64 val)
 {
-- 
2.5.5

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

* [PATCH v3 2/6] powerpc/fsl: Document nospectre_v1 kernel parameter.
  2018-07-13 13:52 [PATCH v3 0/6] powerpc/fsl: Speculation barrier for NXP PowerPC Book3E Diana Craciun
  2018-07-13 13:52 ` [PATCH v3 1/6] powerpc/fsl: Disable the speculation barrier from the command line Diana Craciun
@ 2018-07-13 13:52 ` Diana Craciun
  2018-07-13 13:52 ` [PATCH v3 3/6] powerpc/fsl: Make stf barrier PPC_BOOK3S_64 specific Diana Craciun
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Diana Craciun @ 2018-07-13 13:52 UTC (permalink / raw
  To: linuxppc-dev; +Cc: mpe, oss, leoyang.li, bharat.bhushan, Diana Craciun

Signed-off-by: Diana Craciun <diana.craciun@nxp.com>
---
History:

v2-->v3
- new

 Documentation/admin-guide/kernel-parameters.txt | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt
index efc7aa7..b346cc7 100644
--- a/Documentation/admin-guide/kernel-parameters.txt
+++ b/Documentation/admin-guide/kernel-parameters.txt
@@ -2687,6 +2687,10 @@
 	nosmt		[KNL,S390] Disable symmetric multithreading (SMT).
 			Equivalent to smt=1.
 
+	nospectre_v1	[PPC] Disable mitigations for Spectre Variant 1
+				(bounds check bypass). With this option data leaks are
+				possible in the system.
+
 	nospectre_v2	[X86] Disable all mitigations for the Spectre variant 2
 			(indirect branch prediction) vulnerability. System may
 			allow data leaks with this option, which is equivalent
-- 
2.5.5

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

* [PATCH v3 3/6] powerpc/fsl: Make stf barrier PPC_BOOK3S_64 specific.
  2018-07-13 13:52 [PATCH v3 0/6] powerpc/fsl: Speculation barrier for NXP PowerPC Book3E Diana Craciun
  2018-07-13 13:52 ` [PATCH v3 1/6] powerpc/fsl: Disable the speculation barrier from the command line Diana Craciun
  2018-07-13 13:52 ` [PATCH v3 2/6] powerpc/fsl: Document nospectre_v1 kernel parameter Diana Craciun
@ 2018-07-13 13:52 ` Diana Craciun
  2018-07-13 13:52 ` [PATCH v3 4/6] powerpc/fsl: Enable cpu vulnerabilities reporting for NXP PPC BOOK3E Diana Craciun
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Diana Craciun @ 2018-07-13 13:52 UTC (permalink / raw
  To: linuxppc-dev; +Cc: mpe, oss, leoyang.li, bharat.bhushan, Diana Craciun

NXP Book3E platforms are not vulnerable to speculative store
bypass, so make the mitigations PPC_BOOK3S_64 specific.

Signed-off-by: Diana Craciun <diana.craciun@nxp.com>
---
History:

v2-->v3
- new

 arch/powerpc/kernel/security.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/arch/powerpc/kernel/security.c b/arch/powerpc/kernel/security.c
index 2ebfc5b..3a4e5c3 100644
--- a/arch/powerpc/kernel/security.c
+++ b/arch/powerpc/kernel/security.c
@@ -169,6 +169,7 @@ ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, c
 	return s.len;
 }
 
+#ifdef CONFIG_PPC_BOOK3S_64
 /*
  * Store-forwarding barrier support.
  */
@@ -316,3 +317,5 @@ static __init int stf_barrier_debugfs_init(void)
 }
 device_initcall(stf_barrier_debugfs_init);
 #endif /* CONFIG_DEBUG_FS */
+#endif /* CONFIG_PPC_BOOK3S_64 */
+
-- 
2.5.5

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

* [PATCH v3 4/6] powerpc/fsl: Enable cpu vulnerabilities reporting for NXP PPC BOOK3E
  2018-07-13 13:52 [PATCH v3 0/6] powerpc/fsl: Speculation barrier for NXP PowerPC Book3E Diana Craciun
                   ` (2 preceding siblings ...)
  2018-07-13 13:52 ` [PATCH v3 3/6] powerpc/fsl: Make stf barrier PPC_BOOK3S_64 specific Diana Craciun
@ 2018-07-13 13:52 ` Diana Craciun
  2018-07-13 13:52 ` [PATCH v3 5/6] powerpc/fsl: Add barrier_nospec implementation for NXP PowerPC Book3E Diana Craciun
  2018-07-13 13:52 ` [PATCH v3 6/6] powerpc/fsl: Sanitize the syscall table for NXP PowerPC 32 bit platforms Diana Craciun
  5 siblings, 0 replies; 8+ messages in thread
From: Diana Craciun @ 2018-07-13 13:52 UTC (permalink / raw
  To: linuxppc-dev; +Cc: mpe, oss, leoyang.li, bharat.bhushan, Diana Craciun

The NXP PPC Book3E platforms are not vulnerable to meltdown, so make it 
PPC_BOOK3S_64 specific.

Signed-off-by: Diana Craciun <diana.craciun@nxp.com>
---
History:

v2-->v3
- used the existing functions for spectre v1/v2

 arch/powerpc/Kconfig           | 7 ++++++-
 arch/powerpc/kernel/security.c | 2 ++
 2 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig
index 9f2b75f..116c953 100644
--- a/arch/powerpc/Kconfig
+++ b/arch/powerpc/Kconfig
@@ -165,7 +165,7 @@ config PPC
 	select GENERIC_CLOCKEVENTS_BROADCAST	if SMP
 	select GENERIC_CMOS_UPDATE
 	select GENERIC_CPU_AUTOPROBE
-	select GENERIC_CPU_VULNERABILITIES	if PPC_BOOK3S_64
+	select GENERIC_CPU_VULNERABILITIES	if PPC_NOSPEC
 	select GENERIC_IRQ_SHOW
 	select GENERIC_IRQ_SHOW_LEVEL
 	select GENERIC_SMP_IDLE_THREAD
@@ -240,6 +240,11 @@ config PPC
 	# Please keep this list sorted alphabetically.
 	#
 
+config PPC_NOSPEC
+    bool
+    default y
+    depends on PPC_BOOK3S_64 || PPC_FSL_BOOK3E
+
 config GENERIC_CSUM
 	def_bool n
 
diff --git a/arch/powerpc/kernel/security.c b/arch/powerpc/kernel/security.c
index 3a4e5c3..539c744 100644
--- a/arch/powerpc/kernel/security.c
+++ b/arch/powerpc/kernel/security.c
@@ -92,6 +92,7 @@ static __init int barrier_nospec_debugfs_init(void)
 device_initcall(barrier_nospec_debugfs_init);
 #endif /* CONFIG_DEBUG_FS */
 
+#ifdef CONFIG_PPC_BOOK3S_64
 ssize_t cpu_show_meltdown(struct device *dev, struct device_attribute *attr, char *buf)
 {
 	bool thread_priv;
@@ -124,6 +125,7 @@ ssize_t cpu_show_meltdown(struct device *dev, struct device_attribute *attr, cha
 
 	return sprintf(buf, "Vulnerable\n");
 }
+#endif
 
 ssize_t cpu_show_spectre_v1(struct device *dev, struct device_attribute *attr, char *buf)
 {
-- 
2.5.5

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

* [PATCH v3 5/6] powerpc/fsl: Add barrier_nospec implementation for NXP PowerPC Book3E
  2018-07-13 13:52 [PATCH v3 0/6] powerpc/fsl: Speculation barrier for NXP PowerPC Book3E Diana Craciun
                   ` (3 preceding siblings ...)
  2018-07-13 13:52 ` [PATCH v3 4/6] powerpc/fsl: Enable cpu vulnerabilities reporting for NXP PPC BOOK3E Diana Craciun
@ 2018-07-13 13:52 ` Diana Craciun
  2018-07-17  1:05   ` kbuild test robot
  2018-07-13 13:52 ` [PATCH v3 6/6] powerpc/fsl: Sanitize the syscall table for NXP PowerPC 32 bit platforms Diana Craciun
  5 siblings, 1 reply; 8+ messages in thread
From: Diana Craciun @ 2018-07-13 13:52 UTC (permalink / raw
  To: linuxppc-dev; +Cc: mpe, oss, leoyang.li, bharat.bhushan, Diana Craciun

Implement the barrier_nospec as a isync;sync instruction sequence.
The implementation uses the infrastructure built for BOOK3S 64.

Signed-off-by: Diana Craciun <diana.craciun@nxp.com>
---
History:

v2-->v3
- added PPC_NOSPEC Kconfig
- addressed the review comments

It was a discussion at the previous review cycle about the place in the code
where to call setup_barrier_nospec. I have chosen to call the function in the
common code in order to be re-used on multiple platforms. However, I am not sure
that changes concerning powernv/pseries are correct, I need some input here.

 arch/powerpc/include/asm/barrier.h     | 12 +++++++++---
 arch/powerpc/include/asm/setup.h       |  6 +++++-
 arch/powerpc/kernel/Makefile           |  3 ++-
 arch/powerpc/kernel/module.c           |  4 +++-
 arch/powerpc/kernel/setup-common.c     |  2 ++
 arch/powerpc/kernel/vmlinux.lds.S      |  4 +++-
 arch/powerpc/lib/feature-fixups.c      | 35 +++++++++++++++++++++++++++++++++-
 arch/powerpc/platforms/powernv/setup.c |  1 -
 arch/powerpc/platforms/pseries/setup.c |  1 -
 9 files changed, 58 insertions(+), 10 deletions(-)

diff --git a/arch/powerpc/include/asm/barrier.h b/arch/powerpc/include/asm/barrier.h
index f67b3f6..0bdfa81 100644
--- a/arch/powerpc/include/asm/barrier.h
+++ b/arch/powerpc/include/asm/barrier.h
@@ -77,19 +77,25 @@ do {									\
 })
 
 #ifdef CONFIG_PPC_BOOK3S_64
+#define NOSPEC_BARRIER_SLOT   nop
+#elif defined(CONFIG_PPC_FSL_BOOK3E)
+#define NOSPEC_BARRIER_SLOT   nop; nop
+#endif /* CONFIG_PPC_BOOK3S_64 */
+
+#ifdef CONFIG_PPC_NOSPEC
 /*
  * Prevent execution of subsequent instructions until preceding branches have
  * been fully resolved and are no longer executing speculatively.
  */
-#define barrier_nospec_asm NOSPEC_BARRIER_FIXUP_SECTION; nop
+#define barrier_nospec_asm NOSPEC_BARRIER_FIXUP_SECTION; NOSPEC_BARRIER_SLOT
 
 // This also acts as a compiler barrier due to the memory clobber.
 #define barrier_nospec() asm (stringify_in_c(barrier_nospec_asm) ::: "memory")
 
-#else /* !CONFIG_PPC_BOOK3S_64 */
+#else /* !CONFIG_PPC_NOSPEC */
 #define barrier_nospec_asm
 #define barrier_nospec()
-#endif
+#endif /* CONFIG_PPC_NOSPEC */
 
 #include <asm-generic/barrier.h>
 
diff --git a/arch/powerpc/include/asm/setup.h b/arch/powerpc/include/asm/setup.h
index 8721fd0..1abe152 100644
--- a/arch/powerpc/include/asm/setup.h
+++ b/arch/powerpc/include/asm/setup.h
@@ -52,11 +52,15 @@ enum l1d_flush_type {
 
 void setup_rfi_flush(enum l1d_flush_type, bool enable);
 void do_rfi_flush_fixups(enum l1d_flush_type types);
+#ifdef CONFIG_PPC_NOSPEC
 void setup_barrier_nospec(void);
+#else
+void setup_barrier_nospec(void) { };
+#endif
 void do_barrier_nospec_fixups(bool enable);
 extern bool barrier_nospec_enabled;
 
-#ifdef CONFIG_PPC_BOOK3S_64
+#ifdef CONFIG_PPC_NOSPEC
 void do_barrier_nospec_fixups_range(bool enable, void *start, void *end);
 #else
 static inline void do_barrier_nospec_fixups_range(bool enable, void *start, void *end) { };
diff --git a/arch/powerpc/kernel/Makefile b/arch/powerpc/kernel/Makefile
index 2b4c40b2..cd0eb38 100644
--- a/arch/powerpc/kernel/Makefile
+++ b/arch/powerpc/kernel/Makefile
@@ -42,9 +42,10 @@ obj-$(CONFIG_VDSO32)		+= vdso32/
 obj-$(CONFIG_PPC_WATCHDOG)	+= watchdog.o
 obj-$(CONFIG_HAVE_HW_BREAKPOINT)	+= hw_breakpoint.o
 obj-$(CONFIG_PPC_BOOK3S_64)	+= cpu_setup_ppc970.o cpu_setup_pa6t.o
-obj-$(CONFIG_PPC_BOOK3S_64)	+= cpu_setup_power.o security.o
+obj-$(CONFIG_PPC_BOOK3S_64)	+= cpu_setup_power.o
 obj-$(CONFIG_PPC_BOOK3S_64)	+= mce.o mce_power.o
 obj-$(CONFIG_PPC_BOOK3E_64)	+= exceptions-64e.o idle_book3e.o
+obj-$(CONFIG_PPC_NOSPEC) += security.o
 obj-$(CONFIG_PPC64)		+= vdso64/
 obj-$(CONFIG_ALTIVEC)		+= vecemu.o
 obj-$(CONFIG_PPC_970_NAP)	+= idle_power4.o
diff --git a/arch/powerpc/kernel/module.c b/arch/powerpc/kernel/module.c
index 1b3c683..a0c4967 100644
--- a/arch/powerpc/kernel/module.c
+++ b/arch/powerpc/kernel/module.c
@@ -72,13 +72,15 @@ int module_finalize(const Elf_Ehdr *hdr,
 		do_feature_fixups(powerpc_firmware_features,
 				  (void *)sect->sh_addr,
 				  (void *)sect->sh_addr + sect->sh_size);
+#endif /* CONFIG_PPC64 */
 
+#if defined(CONFIG_PPC64) || defined(CONFIG_PPC_FSL_BOOK3E)
 	sect = find_section(hdr, sechdrs, "__spec_barrier_fixup");
 	if (sect != NULL)
 		do_barrier_nospec_fixups_range(barrier_nospec_enabled,
 				  (void *)sect->sh_addr,
 				  (void *)sect->sh_addr + sect->sh_size);
-#endif
+#endif /* CONFIG_PPC64 || CONFIG_PPC_FSL_BOOK3E */
 
 	sect = find_section(hdr, sechdrs, "__lwsync_fixup");
 	if (sect != NULL)
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
index 40b44bb..93fa0c9 100644
--- a/arch/powerpc/kernel/setup-common.c
+++ b/arch/powerpc/kernel/setup-common.c
@@ -972,6 +972,8 @@ void __init setup_arch(char **cmdline_p)
 	if (ppc_md.setup_arch)
 		ppc_md.setup_arch();
 
+	setup_barrier_nospec();
+
 	paging_init();
 
 	/* Initialize the MMU context management stuff. */
diff --git a/arch/powerpc/kernel/vmlinux.lds.S b/arch/powerpc/kernel/vmlinux.lds.S
index 5baac79..6087b02 100644
--- a/arch/powerpc/kernel/vmlinux.lds.S
+++ b/arch/powerpc/kernel/vmlinux.lds.S
@@ -153,14 +153,16 @@ SECTIONS
 		*(__rfi_flush_fixup)
 		__stop___rfi_flush_fixup = .;
 	}
+#endif /* CONFIG_PPC64 */
 
+#if defined(CONFIG_PPC64) || defined(CONFIG_PPC_FSL_BOOK3E)
 	. = ALIGN(8);
 	__spec_barrier_fixup : AT(ADDR(__spec_barrier_fixup) - LOAD_OFFSET) {
 		__start___barrier_nospec_fixup = .;
 		*(__barrier_nospec_fixup)
 		__stop___barrier_nospec_fixup = .;
 	}
-#endif
+#endif /* CONFIG_PPC64 || CONFIG_PPC_FSL_BOOK3E */
 
 	EXCEPTION_TABLE(0)
 
diff --git a/arch/powerpc/lib/feature-fixups.c b/arch/powerpc/lib/feature-fixups.c
index 8b69f86..41f372e 100644
--- a/arch/powerpc/lib/feature-fixups.c
+++ b/arch/powerpc/lib/feature-fixups.c
@@ -304,6 +304,9 @@ void do_barrier_nospec_fixups_range(bool enable, void *fixup_start, void *fixup_
 	printk(KERN_DEBUG "barrier-nospec: patched %d locations\n", i);
 }
 
+#endif /* CONFIG_PPC_BOOK3S_64 */
+
+#ifdef CONFIG_PPC_NOSPEC
 void do_barrier_nospec_fixups(bool enable)
 {
 	void *start, *end;
@@ -313,8 +316,38 @@ void do_barrier_nospec_fixups(bool enable)
 
 	do_barrier_nospec_fixups_range(enable, start, end);
 }
+#endif /* CONFIG_PPC_NOSPEC */
 
-#endif /* CONFIG_PPC_BOOK3S_64 */
+#ifdef CONFIG_PPC_FSL_BOOK3E
+void do_barrier_nospec_fixups_range(bool enable, void *fixup_start, void *fixup_end)
+{
+	unsigned int instr[2], *dest;
+	long *start, *end;
+	int i;
+
+	start = fixup_start;
+	end = fixup_end;
+
+	instr[0] = PPC_INST_NOP;
+	instr[1] = PPC_INST_NOP;
+
+	if (enable) {
+		pr_info("barrier-nospec: using isync; sync as speculation barrier\n");
+		instr[0] = PPC_INST_ISYNC;
+		instr[1] = PPC_INST_SYNC;
+	}
+
+	for (i = 0; start < end; start++, i++) {
+		dest = (void *)start + *start;
+
+		pr_devel("patching dest %lx\n", (unsigned long)dest);
+		patch_instruction(dest, instr[0]);
+		patch_instruction(dest + 1, instr[1]);
+	}
+
+	printk(KERN_DEBUG "barrier-nospec: patched %d locations\n", i);
+}
+#endif /* CONFIG_PPC_FSL_BOOK3E */
 
 void do_lwsync_fixups(unsigned long value, void *fixup_start, void *fixup_end)
 {
diff --git a/arch/powerpc/platforms/powernv/setup.c b/arch/powerpc/platforms/powernv/setup.c
index f96df0a..1ab6dc7 100644
--- a/arch/powerpc/platforms/powernv/setup.c
+++ b/arch/powerpc/platforms/powernv/setup.c
@@ -124,7 +124,6 @@ static void pnv_setup_rfi_flush(void)
 		  security_ftr_enabled(SEC_FTR_L1D_FLUSH_HV));
 
 	setup_rfi_flush(type, enable);
-	setup_barrier_nospec();
 }
 
 static void __init pnv_setup_arch(void)
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index 139f0af..fdb32e0 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -534,7 +534,6 @@ void pseries_setup_rfi_flush(void)
 		 security_ftr_enabled(SEC_FTR_L1D_FLUSH_PR);
 
 	setup_rfi_flush(types, enable);
-	setup_barrier_nospec();
 }
 
 #ifdef CONFIG_PCI_IOV
-- 
2.5.5

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

* [PATCH v3 6/6] powerpc/fsl: Sanitize the syscall table for NXP PowerPC 32 bit platforms
  2018-07-13 13:52 [PATCH v3 0/6] powerpc/fsl: Speculation barrier for NXP PowerPC Book3E Diana Craciun
                   ` (4 preceding siblings ...)
  2018-07-13 13:52 ` [PATCH v3 5/6] powerpc/fsl: Add barrier_nospec implementation for NXP PowerPC Book3E Diana Craciun
@ 2018-07-13 13:52 ` Diana Craciun
  5 siblings, 0 replies; 8+ messages in thread
From: Diana Craciun @ 2018-07-13 13:52 UTC (permalink / raw
  To: linuxppc-dev; +Cc: mpe, oss, leoyang.li, bharat.bhushan, Diana Craciun

Used barrier_nospec to sanitize the syscall table.

Signed-off-by: Diana Craciun <diana.craciun@nxp.com>
---
History:

v2-->v3
- included in the series

 arch/powerpc/kernel/entry_32.S | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/arch/powerpc/kernel/entry_32.S b/arch/powerpc/kernel/entry_32.S
index 973577f..8f05280 100644
--- a/arch/powerpc/kernel/entry_32.S
+++ b/arch/powerpc/kernel/entry_32.S
@@ -33,6 +33,7 @@
 #include <asm/unistd.h>
 #include <asm/ptrace.h>
 #include <asm/export.h>
+#include <asm/barrier.h>
 
 /*
  * MSR_KERNEL is > 0x10000 on 4xx/Book-E since it include MSR_CE.
@@ -358,6 +359,15 @@ syscall_dotrace_cont:
 	ori	r10,r10,sys_call_table@l
 	slwi	r0,r0,2
 	bge-	66f
+
+	barrier_nospec_asm
+	/*
+	 * Prevent the load of the handler below (based on the user-passed
+	 * system call number) being speculatively executed until the test
+	 * against NR_syscalls and branch to .66f above has
+	 * committed.
+	 */
+
 	lwzx	r10,r10,r0	/* Fetch system call handler [ptr] */
 	mtlr	r10
 	addi	r9,r1,STACK_FRAME_OVERHEAD
-- 
2.5.5

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

* Re: [PATCH v3 5/6] powerpc/fsl: Add barrier_nospec implementation for NXP PowerPC Book3E
  2018-07-13 13:52 ` [PATCH v3 5/6] powerpc/fsl: Add barrier_nospec implementation for NXP PowerPC Book3E Diana Craciun
@ 2018-07-17  1:05   ` kbuild test robot
  0 siblings, 0 replies; 8+ messages in thread
From: kbuild test robot @ 2018-07-17  1:05 UTC (permalink / raw
  To: Diana Craciun
  Cc: kbuild-all, linuxppc-dev, oss, Diana Craciun, bharat.bhushan,
	leoyang.li

[-- Attachment #1: Type: text/plain, Size: 7856 bytes --]

Hi Diana,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on powerpc/next]
[also build test ERROR on v4.18-rc5 next-20180713]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Diana-Craciun/powerpc-fsl-Disable-the-speculation-barrier-from-the-command-line/20180714-130716
base:   https://git.kernel.org/pub/scm/linux/kernel/git/powerpc/linux.git next
config: powerpc-bluestone_defconfig (attached as .config)
compiler: powerpc-linux-gnu-gcc (Debian 7.2.0-11) 7.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=7.2.0 make.cross ARCH=powerpc 
:::::: branch date: 2 days ago
:::::: commit date: 2 days ago

All errors (new ones prefixed by >>):

   arch/powerpc/kernel/cputable.o: In function `setup_barrier_nospec':
>> cputable.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/kernel/irq.o: In function `setup_barrier_nospec':
   irq.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/kernel/vdso.o: In function `setup_barrier_nospec':
   vdso.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/kernel/process.o: In function `setup_barrier_nospec':
   process.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/kernel/idle.o: In function `setup_barrier_nospec':
   idle.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/kernel/sysfs.o: In function `setup_barrier_nospec':
   sysfs.c:(.text+0x98): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/kernel/time.o: In function `setup_barrier_nospec':
   time.c:(.text+0x14c): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/kernel/prom.o: In function `setup_barrier_nospec':
   prom.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/kernel/traps.o: In function `setup_barrier_nospec':
   traps.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/kernel/setup-common.o: In function `setup_barrier_nospec':
   setup-common.c:(.text+0x428): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/kernel/dma.o: In function `setup_barrier_nospec':
   dma.c:(.text+0x3dc): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/kernel/of_platform.o: In function `setup_barrier_nospec':
   of_platform.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/kernel/proc_powerpc.o: In function `setup_barrier_nospec':
   proc_powerpc.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/kernel/setup_32.o: In function `setup_barrier_nospec':
   setup_32.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/kernel/legacy_serial.o: In function `setup_barrier_nospec':
   legacy_serial.c:(.text+0x90): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/kernel/pci_32.o: In function `setup_barrier_nospec':
   pci_32.c:(.text+0x1c8): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/kernel/pci-common.o: In function `setup_barrier_nospec':
   pci-common.c:(.text+0x61c): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/kernel/pci_of_scan.o: In function `setup_barrier_nospec':
   pci_of_scan.c:(.text+0x4c): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/kernel/msi.o: In function `setup_barrier_nospec':
   msi.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/kernel/iomap.o: In function `setup_barrier_nospec':
   iomap.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/mm/mem.o: In function `setup_barrier_nospec':
   mem.c:(.text+0x18): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/mm/init_32.o: In function `setup_barrier_nospec':
   init_32.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/mm/pgtable_32.o: In function `setup_barrier_nospec':
   pgtable_32.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/mm/hugetlbpage.o: In function `setup_barrier_nospec':
   hugetlbpage.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/lib/alloc.o: In function `setup_barrier_nospec':
   alloc.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/lib/code-patching.o: In function `setup_barrier_nospec':
   code-patching.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/lib/feature-fixups.o: In function `setup_barrier_nospec':
   feature-fixups.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/sysdev/msi_bitmap.o: In function `setup_barrier_nospec':
   msi_bitmap.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/sysdev/indirect_pci.o: In function `setup_barrier_nospec':
   indirect_pci.c:(.text+0x220): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/platforms/4xx/pci.o: In function `setup_barrier_nospec':
   pci.c:(.text+0x954): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/platforms/4xx/msi.o: In function `setup_barrier_nospec':
   msi.c:(.text+0x6d0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/platforms/4xx/cpm.o: In function `setup_barrier_nospec':
   cpm.c:(.text+0x410): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   arch/powerpc/platforms/44x/ppc44x_simple.o: In function `setup_barrier_nospec':
   ppc44x_simple.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here
   block/blk-mq-pci.o: In function `setup_barrier_nospec':
   blk-mq-pci.c:(.text+0x0): multiple definition of `setup_barrier_nospec'
   init/main.o:main.c:(.text+0x9c): first defined here

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 14904 bytes --]

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

end of thread, other threads:[~2018-07-17  0:54 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-07-13 13:52 [PATCH v3 0/6] powerpc/fsl: Speculation barrier for NXP PowerPC Book3E Diana Craciun
2018-07-13 13:52 ` [PATCH v3 1/6] powerpc/fsl: Disable the speculation barrier from the command line Diana Craciun
2018-07-13 13:52 ` [PATCH v3 2/6] powerpc/fsl: Document nospectre_v1 kernel parameter Diana Craciun
2018-07-13 13:52 ` [PATCH v3 3/6] powerpc/fsl: Make stf barrier PPC_BOOK3S_64 specific Diana Craciun
2018-07-13 13:52 ` [PATCH v3 4/6] powerpc/fsl: Enable cpu vulnerabilities reporting for NXP PPC BOOK3E Diana Craciun
2018-07-13 13:52 ` [PATCH v3 5/6] powerpc/fsl: Add barrier_nospec implementation for NXP PowerPC Book3E Diana Craciun
2018-07-17  1:05   ` kbuild test robot
2018-07-13 13:52 ` [PATCH v3 6/6] powerpc/fsl: Sanitize the syscall table for NXP PowerPC 32 bit platforms Diana Craciun

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.