This series adds support for kernel compiled in Thumb mode and fixes a kernel panic on smp bring-up when FORTIFY_SOURCE is enabled.
The series started with the second patch as an RFC, and the first patch were suggested on the review to complement the fix.
The changes were run-tested on a Digilent Zybo Z7 board
Luis Araneda (2): ARM: zynq: support smp in thumb mode ARM: zynq: Use memcpy_toio instead of memcpy on smp bring-up
arch/arm/mach-zynq/headsmp.S | 2 ++ arch/arm/mach-zynq/platsmp.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-)
Add .arm directive to headsmp.S to ensure that the CPU starts in 32-bit ARM mode and the correct code size is copied on smp bring-up
Additionally, start secondary CPUs on secondary_startup_arm to automatically switch from ARM to thumb on a thumb kernel
Suggested-by: Michal Simek michal.simek@xilinx.com Signed-off-by: Luis Araneda luaraneda@gmail.com --- arch/arm/mach-zynq/headsmp.S | 2 ++ arch/arm/mach-zynq/platsmp.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/arch/arm/mach-zynq/headsmp.S b/arch/arm/mach-zynq/headsmp.S index ab85003cf9ad..3449e0d1f990 100644 --- a/arch/arm/mach-zynq/headsmp.S +++ b/arch/arm/mach-zynq/headsmp.S @@ -7,6 +7,8 @@ #include <linux/init.h> #include <asm/assembler.h>
+ .arm + ENTRY(zynq_secondary_trampoline) ARM_BE8(setend be) @ ensure we are in BE8 mode ldr r0, zynq_secondary_trampoline_jump diff --git a/arch/arm/mach-zynq/platsmp.c b/arch/arm/mach-zynq/platsmp.c index a7cfe07156f4..38728badabd4 100644 --- a/arch/arm/mach-zynq/platsmp.c +++ b/arch/arm/mach-zynq/platsmp.c @@ -81,7 +81,7 @@ EXPORT_SYMBOL(zynq_cpun_start);
static int zynq_boot_secondary(unsigned int cpu, struct task_struct *idle) { - return zynq_cpun_start(__pa_symbol(secondary_startup), cpu); + return zynq_cpun_start(__pa_symbol(secondary_startup_arm), cpu); }
/*
On Mon, Aug 05, 2019 at 11:07:17PM -0400, Luis Araneda wrote:
Add .arm directive to headsmp.S to ensure that the CPU starts in 32-bit ARM mode and the correct code size is copied on smp bring-up
Additionally, start secondary CPUs on secondary_startup_arm to automatically switch from ARM to thumb on a thumb kernel
Suggested-by: Michal Simek michal.simek@xilinx.com Signed-off-by: Luis Araneda luaraneda@gmail.com
arch/arm/mach-zynq/headsmp.S | 2 ++ arch/arm/mach-zynq/platsmp.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-)
<formletter>
This is not the correct way to submit patches for inclusion in the stable kernel tree. Please read: https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html for how to do this properly.
</formletter>
On 06. 08. 19 5:07, Luis Araneda wrote:
Add .arm directive to headsmp.S to ensure that the CPU starts in 32-bit ARM mode and the correct code size is copied on smp bring-up
Additionally, start secondary CPUs on secondary_startup_arm to automatically switch from ARM to thumb on a thumb kernel
Suggested-by: Michal Simek michal.simek@xilinx.com Signed-off-by: Luis Araneda luaraneda@gmail.com
arch/arm/mach-zynq/headsmp.S | 2 ++ arch/arm/mach-zynq/platsmp.c | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/arch/arm/mach-zynq/headsmp.S b/arch/arm/mach-zynq/headsmp.S index ab85003cf9ad..3449e0d1f990 100644 --- a/arch/arm/mach-zynq/headsmp.S +++ b/arch/arm/mach-zynq/headsmp.S @@ -7,6 +7,8 @@ #include <linux/init.h> #include <asm/assembler.h>
- .arm
ENTRY(zynq_secondary_trampoline) ARM_BE8(setend be) @ ensure we are in BE8 mode ldr r0, zynq_secondary_trampoline_jump diff --git a/arch/arm/mach-zynq/platsmp.c b/arch/arm/mach-zynq/platsmp.c index a7cfe07156f4..38728badabd4 100644 --- a/arch/arm/mach-zynq/platsmp.c +++ b/arch/arm/mach-zynq/platsmp.c @@ -81,7 +81,7 @@ EXPORT_SYMBOL(zynq_cpun_start); static int zynq_boot_secondary(unsigned int cpu, struct task_struct *idle) {
- return zynq_cpun_start(__pa_symbol(secondary_startup), cpu);
- return zynq_cpun_start(__pa_symbol(secondary_startup_arm), cpu);
} /*
It is really a question if this should go to stable tree. It is pretty much new feature. Will be good to also add link to similar patch for example this one 5616f36713ea77f57ae908bf2fef641364403c9f.
M
This fixes a kernel panic (read overflow) on memcpy when FORTIFY_SOURCE is enabled.
The computed size of memcpy args are: - p_size (dst): 4294967295 = (size_t) -1 - q_size (src): 1 - size (len): 8
Additionally, the memory is marked as __iomem, so one of the memcpy_* functions should be used for read/write
Signed-off-by: Luis Araneda luaraneda@gmail.com --- arch/arm/mach-zynq/platsmp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm/mach-zynq/platsmp.c b/arch/arm/mach-zynq/platsmp.c index 38728badabd4..a10085be9073 100644 --- a/arch/arm/mach-zynq/platsmp.c +++ b/arch/arm/mach-zynq/platsmp.c @@ -57,7 +57,7 @@ int zynq_cpun_start(u32 address, int cpu) * 0x4: Jump by mov instruction * 0x8: Jumping address */ - memcpy((__force void *)zero, &zynq_secondary_trampoline, + memcpy_toio(zero, &zynq_secondary_trampoline, trampoline_size); writel(address, zero + trampoline_size);
On Mon, Aug 05, 2019 at 11:07:18PM -0400, Luis Araneda wrote:
This fixes a kernel panic (read overflow) on memcpy when FORTIFY_SOURCE is enabled.
The computed size of memcpy args are:
- p_size (dst): 4294967295 = (size_t) -1
- q_size (src): 1
- size (len): 8
Additionally, the memory is marked as __iomem, so one of the memcpy_* functions should be used for read/write
Signed-off-by: Luis Araneda luaraneda@gmail.com
arch/arm/mach-zynq/platsmp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
<formletter>
This is not the correct way to submit patches for inclusion in the stable kernel tree. Please read: https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html for how to do this properly.
</formletter>
On 06. 08. 19 5:07, Luis Araneda wrote:
This fixes a kernel panic (read overflow) on memcpy when FORTIFY_SOURCE is enabled.
The computed size of memcpy args are:
- p_size (dst): 4294967295 = (size_t) -1
- q_size (src): 1
- size (len): 8
Additionally, the memory is marked as __iomem, so one of the memcpy_* functions should be used for read/write
Signed-off-by: Luis Araneda luaraneda@gmail.com
arch/arm/mach-zynq/platsmp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/arch/arm/mach-zynq/platsmp.c b/arch/arm/mach-zynq/platsmp.c index 38728badabd4..a10085be9073 100644 --- a/arch/arm/mach-zynq/platsmp.c +++ b/arch/arm/mach-zynq/platsmp.c @@ -57,7 +57,7 @@ int zynq_cpun_start(u32 address, int cpu) * 0x4: Jump by mov instruction * 0x8: Jumping address */
memcpy((__force void *)zero, &zynq_secondary_trampoline,
memcpy_toio(zero, &zynq_secondary_trampoline, trampoline_size); writel(address, zero + trampoline_size);
I would consider this one as stable material. Please also add there link to the patch which this patch fixes.
M
On Mon, Aug 05, 2019 at 11:07:16PM -0400, Luis Araneda wrote:
This series adds support for kernel compiled in Thumb mode and fixes a kernel panic on smp bring-up when FORTIFY_SOURCE is enabled.
The series started with the second patch as an RFC, and the first patch were suggested on the review to complement the fix.
The changes were run-tested on a Digilent Zybo Z7 board
Luis Araneda (2): ARM: zynq: support smp in thumb mode ARM: zynq: Use memcpy_toio instead of memcpy on smp bring-up
arch/arm/mach-zynq/headsmp.S | 2 ++ arch/arm/mach-zynq/platsmp.c | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-)
-- 2.22.0
<formletter>
This is not the correct way to submit patches for inclusion in the stable kernel tree. Please read: https://www.kernel.org/doc/html/latest/process/stable-kernel-rules.html for how to do this properly.
</formletter>
linux-stable-mirror@lists.linaro.org