Message ID | 20210407222337.1482024-1-hauke@hauke-m.de |
---|---|
State | Accepted |
Delegated to: | Hauke Mehrtens |
Headers | show |
Series | kernel: Activate FORTIFY_SOURCE for MIPS kernel 5.4 | expand |
On Wed, Apr 7, 2021 at 3:26 PM Hauke Mehrtens <hauke@hauke-m.de> wrote: > > CONFIG_FORTIFY_SOURCE=y is already set in the generic kernel > configuration, but it is not working for MIPS on kernel 5.4, support for > MIPS was only added with kernel 5.5, other architectures like aarch64 > support FORTIFY_SOURCE already since some time. > > This patch adds support for FORTIFY_SOURCE to MIPS with kernel 5.4, > kernel 5.10 already supports this and needs no changes. > > This backports one patch from kernel 5.5 and one fix from 5.8 to make > fortify source also work on our kernel 5.4. > > The changes are not compatible with the > 306-mips_mem_functions_performance.patch patch which was also removed > with kernel 5.10, probably because of the same problems. I think it is > not needed anyway as the compiler should automatically optimize the > calls to memset(), memcpy() and memmove() even when not explicitly > telling the compiler to use the build in variant. > > Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> Acked-by: Rosen Penev <rosenp@gmail.com> > --- > > I would like to backport this to 21.02 too. Seems good. > > ...-Kconfig-Add-ARCH_HAS_FORTIFY_SOURCE.patch | 32 ++++++ > ...11-MIPS-Fix-exception-handler-memcpy.patch | 107 ++++++++++++++++++ > .../301-mips_image_cmdline_hack.patch | 2 +- > ...CPU_MIPS64-for-remaining-MIPS64-CPUs.patch | 2 +- > .../300-mips_expose_boot_raw.patch | 4 +- > .../306-mips_mem_functions_performance.patch | 106 ----------------- > 6 files changed, 143 insertions(+), 110 deletions(-) > create mode 100644 target/linux/generic/backport-5.4/310-mips-Kconfig-Add-ARCH_HAS_FORTIFY_SOURCE.patch > create mode 100644 target/linux/generic/backport-5.4/311-MIPS-Fix-exception-handler-memcpy.patch > delete mode 100644 target/linux/generic/pending-5.4/306-mips_mem_functions_performance.patch > > diff --git a/target/linux/generic/backport-5.4/310-mips-Kconfig-Add-ARCH_HAS_FORTIFY_SOURCE.patch b/target/linux/generic/backport-5.4/310-mips-Kconfig-Add-ARCH_HAS_FORTIFY_SOURCE.patch > new file mode 100644 > index 000000000000..e02f10354376 > --- /dev/null > +++ b/target/linux/generic/backport-5.4/310-mips-Kconfig-Add-ARCH_HAS_FORTIFY_SOURCE.patch > @@ -0,0 +1,32 @@ > +From a8d2bb0559b5fefa5173ff4e7496cc6250db2c8a Mon Sep 17 00:00:00 2001 > +From: Dmitry Korotin <dkorotin@wavecomp.com> > +Date: Thu, 12 Sep 2019 22:53:45 +0000 > +Subject: [PATCH] mips: Kconfig: Add ARCH_HAS_FORTIFY_SOURCE > + > +FORTIFY_SOURCE detects various overflows at compile and run time. > +(6974f0c4555e ("include/linux/string.h: > +add the option of fortified string.h functions) > + > +ARCH_HAS_FORTIFY_SOURCE means that the architecture can be built and > +run with CONFIG_FORTIFY_SOURCE. > + > +Since mips can be built and run with that flag, > +select ARCH_HAS_FORTIFY_SOURCE as default. > + > +Signed-off-by: Dmitry Korotin <dkorotin@wavecomp.com> > +Signed-off-by: Paul Burton <paul.burton@mips.com> > +Cc: linux-mips@vger.kernel.org > +--- > + arch/mips/Kconfig | 1 + > + 1 file changed, 1 insertion(+) > + > +--- a/arch/mips/Kconfig > ++++ b/arch/mips/Kconfig > +@@ -7,6 +7,7 @@ config MIPS > + select ARCH_CLOCKSOURCE_DATA > + select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST > + select ARCH_HAS_UBSAN_SANITIZE_ALL > ++ select ARCH_HAS_FORTIFY_SOURCE > + select ARCH_SUPPORTS_UPROBES > + select ARCH_USE_BUILTIN_BSWAP > + select ARCH_USE_CMPXCHG_LOCKREF if 64BIT > diff --git a/target/linux/generic/backport-5.4/311-MIPS-Fix-exception-handler-memcpy.patch b/target/linux/generic/backport-5.4/311-MIPS-Fix-exception-handler-memcpy.patch > new file mode 100644 > index 000000000000..5a6725c7a072 > --- /dev/null > +++ b/target/linux/generic/backport-5.4/311-MIPS-Fix-exception-handler-memcpy.patch > @@ -0,0 +1,107 @@ > +From e01c91a360793298c9e1656a61faceff01487a43 Mon Sep 17 00:00:00 2001 > +From: Ben Hutchings <ben@decadent.org.uk> > +Date: Sat, 23 May 2020 23:50:34 +0800 > +Subject: [PATCH] MIPS: Fix exception handler memcpy() > + > +The exception handler subroutines are declared as a single char, but > +when copied to the required addresses the copy length is 0x80. > + > +When range checks are enabled for memcpy() this results in a build > +failure, with error messages such as: > + > +In file included from arch/mips/mti-malta/malta-init.c:15: > +In function 'memcpy', > + inlined from 'mips_nmi_setup' at arch/mips/mti-malta/malta-init.c:98:2: > +include/linux/string.h:376:4: error: call to '__read_overflow2' declared with attribute error: detected read beyond size of object passed as 2nd parameter > + 376 | __read_overflow2(); > + | ^~~~~~~~~~~~~~~~~~ > + > +Change the declarations to use type char[]. > + > +Signed-off-by: Ben Hutchings <ben@decadent.org.uk> > +Signed-off-by: YunQiang Su <syq@debian.org> > +Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de> > +--- > + arch/mips/loongson64/common/init.c | 4 ++-- > + arch/mips/mti-malta/malta-init.c | 8 ++++---- > + arch/mips/pistachio/init.c | 8 ++++---- > + 3 files changed, 10 insertions(+), 10 deletions(-) > + > +--- a/arch/mips/loongson64/common/init.c > ++++ b/arch/mips/loongson64/common/init.c > +@@ -18,10 +18,10 @@ unsigned long __maybe_unused _loongson_a > + static void __init mips_nmi_setup(void) > + { > + void *base; > +- extern char except_vec_nmi; > ++ extern char except_vec_nmi[]; > + > + base = (void *)(CAC_BASE + 0x380); > +- memcpy(base, &except_vec_nmi, 0x80); > ++ memcpy(base, except_vec_nmi, 0x80); > + flush_icache_range((unsigned long)base, (unsigned long)base + 0x80); > + } > + > +--- a/arch/mips/mti-malta/malta-init.c > ++++ b/arch/mips/mti-malta/malta-init.c > +@@ -90,24 +90,24 @@ static void __init console_config(void) > + static void __init mips_nmi_setup(void) > + { > + void *base; > +- extern char except_vec_nmi; > ++ extern char except_vec_nmi[]; > + > + base = cpu_has_veic ? > + (void *)(CAC_BASE + 0xa80) : > + (void *)(CAC_BASE + 0x380); > +- memcpy(base, &except_vec_nmi, 0x80); > ++ memcpy(base, except_vec_nmi, 0x80); > + flush_icache_range((unsigned long)base, (unsigned long)base + 0x80); > + } > + > + static void __init mips_ejtag_setup(void) > + { > + void *base; > +- extern char except_vec_ejtag_debug; > ++ extern char except_vec_ejtag_debug[]; > + > + base = cpu_has_veic ? > + (void *)(CAC_BASE + 0xa00) : > + (void *)(CAC_BASE + 0x300); > +- memcpy(base, &except_vec_ejtag_debug, 0x80); > ++ memcpy(base, except_vec_ejtag_debug, 0x80); > + flush_icache_range((unsigned long)base, (unsigned long)base + 0x80); > + } > + > +--- a/arch/mips/pistachio/init.c > ++++ b/arch/mips/pistachio/init.c > +@@ -83,12 +83,12 @@ phys_addr_t mips_cdmm_phys_base(void) > + static void __init mips_nmi_setup(void) > + { > + void *base; > +- extern char except_vec_nmi; > ++ extern char except_vec_nmi[]; > + > + base = cpu_has_veic ? > + (void *)(CAC_BASE + 0xa80) : > + (void *)(CAC_BASE + 0x380); > +- memcpy(base, &except_vec_nmi, 0x80); > ++ memcpy(base, except_vec_nmi, 0x80); > + flush_icache_range((unsigned long)base, > + (unsigned long)base + 0x80); > + } > +@@ -96,12 +96,12 @@ static void __init mips_nmi_setup(void) > + static void __init mips_ejtag_setup(void) > + { > + void *base; > +- extern char except_vec_ejtag_debug; > ++ extern char except_vec_ejtag_debug[]; > + > + base = cpu_has_veic ? > + (void *)(CAC_BASE + 0xa00) : > + (void *)(CAC_BASE + 0x300); > +- memcpy(base, &except_vec_ejtag_debug, 0x80); > ++ memcpy(base, except_vec_ejtag_debug, 0x80); > + flush_icache_range((unsigned long)base, > + (unsigned long)base + 0x80); > + } > diff --git a/target/linux/generic/hack-5.4/301-mips_image_cmdline_hack.patch b/target/linux/generic/hack-5.4/301-mips_image_cmdline_hack.patch > index da0aa3425064..ada65cd2a08a 100644 > --- a/target/linux/generic/hack-5.4/301-mips_image_cmdline_hack.patch > +++ b/target/linux/generic/hack-5.4/301-mips_image_cmdline_hack.patch > @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> > > --- a/arch/mips/Kconfig > +++ b/arch/mips/Kconfig > -@@ -1158,6 +1158,10 @@ config SYNC_R4K > +@@ -1159,6 +1159,10 @@ config SYNC_R4K > config MIPS_MACHINE > def_bool n > > diff --git a/target/linux/generic/pending-5.4/103-MIPS-select-CPU_MIPS64-for-remaining-MIPS64-CPUs.patch b/target/linux/generic/pending-5.4/103-MIPS-select-CPU_MIPS64-for-remaining-MIPS64-CPUs.patch > index 3b0431669283..4e7a532156d6 100644 > --- a/target/linux/generic/pending-5.4/103-MIPS-select-CPU_MIPS64-for-remaining-MIPS64-CPUs.patch > +++ b/target/linux/generic/pending-5.4/103-MIPS-select-CPU_MIPS64-for-remaining-MIPS64-CPUs.patch > @@ -25,7 +25,7 @@ Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> > > --- a/arch/mips/Kconfig > +++ b/arch/mips/Kconfig > -@@ -2036,7 +2036,8 @@ config CPU_MIPS32 > +@@ -2037,7 +2037,8 @@ config CPU_MIPS32 > > config CPU_MIPS64 > bool > diff --git a/target/linux/generic/pending-5.4/300-mips_expose_boot_raw.patch b/target/linux/generic/pending-5.4/300-mips_expose_boot_raw.patch > index 476ae501d645..7b9ae65c60b0 100644 > --- a/target/linux/generic/pending-5.4/300-mips_expose_boot_raw.patch > +++ b/target/linux/generic/pending-5.4/300-mips_expose_boot_raw.patch > @@ -9,7 +9,7 @@ Acked-by: Rob Landley <rob@landley.net> > --- > --- a/arch/mips/Kconfig > +++ b/arch/mips/Kconfig > -@@ -1068,9 +1068,6 @@ config FW_ARC > +@@ -1069,9 +1069,6 @@ config FW_ARC > config ARCH_MAY_HAVE_PC_FDC > bool > > @@ -19,7 +19,7 @@ Acked-by: Rob Landley <rob@landley.net> > config CEVT_BCM1480 > bool > > -@@ -3043,6 +3040,18 @@ choice > +@@ -3044,6 +3041,18 @@ choice > bool "Extend builtin kernel arguments with bootloader arguments" > endchoice > > diff --git a/target/linux/generic/pending-5.4/306-mips_mem_functions_performance.patch b/target/linux/generic/pending-5.4/306-mips_mem_functions_performance.patch > deleted file mode 100644 > index 611aa0314f99..000000000000 > --- a/target/linux/generic/pending-5.4/306-mips_mem_functions_performance.patch > +++ /dev/null > @@ -1,106 +0,0 @@ > -From: Felix Fietkau <nbd@nbd.name> > -Subject: [PATCH] mips: allow the compiler to optimize memset, memcmp, memcpy for better performance and (in some instances) smaller code > - > -lede-commit: 07e59c7bc7f375f792ec9734be42fe4fa391a8bb > -Signed-off-by: Felix Fietkau <nbd@nbd.name> > ---- > - arch/mips/boot/compressed/Makefile | 3 ++- > - arch/mips/include/asm/string.h | 38 ++++++++++++++++++++++++++++++++++++++ > - arch/mips/lib/Makefile | 2 +- > - arch/mips/lib/memcmp.c | 22 ++++++++++++++++++++++ > - 4 files changed, 63 insertions(+), 2 deletions(-) > - create mode 100644 arch/mips/lib/memcmp.c > - > ---- a/arch/mips/boot/compressed/Makefile > -+++ b/arch/mips/boot/compressed/Makefile > -@@ -23,7 +23,8 @@ KBUILD_CFLAGS := $(filter-out -pg, $(KBU > - KBUILD_CFLAGS := $(filter-out -fstack-protector, $(KBUILD_CFLAGS)) > - > - KBUILD_CFLAGS := $(KBUILD_CFLAGS) -D__KERNEL__ \ > -- -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -D"VMLINUX_LOAD_ADDRESS_ULL=$(VMLINUX_LOAD_ADDRESS)ull" > -+ -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -D"VMLINUX_LOAD_ADDRESS_ULL=$(VMLINUX_LOAD_ADDRESS)ull" \ > -+ -D__ZBOOT__ > - > - KBUILD_AFLAGS := $(KBUILD_AFLAGS) -D__ASSEMBLY__ \ > - -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) \ > ---- a/arch/mips/include/asm/string.h > -+++ b/arch/mips/include/asm/string.h > -@@ -19,4 +19,42 @@ extern void *memcpy(void *__to, __const_ > - #define __HAVE_ARCH_MEMMOVE > - extern void *memmove(void *__dest, __const__ void *__src, size_t __n); > - > -+#ifndef __ZBOOT__ > -+#define memset(__s, __c, len) \ > -+({ \ > -+ size_t __len = (len); \ > -+ void *__ret; \ > -+ if (__builtin_constant_p(len) && __len >= 64) \ > -+ __ret = memset((__s), (__c), __len); \ > -+ else \ > -+ __ret = __builtin_memset((__s), (__c), __len); \ > -+ __ret; \ > -+}) > -+ > -+#define memcpy(dst, src, len) \ > -+({ \ > -+ size_t __len = (len); \ > -+ void *__ret; \ > -+ if (__builtin_constant_p(len) && __len >= 64) \ > -+ __ret = memcpy((dst), (src), __len); \ > -+ else \ > -+ __ret = __builtin_memcpy((dst), (src), __len); \ > -+ __ret; \ > -+}) > -+ > -+#define memmove(dst, src, len) \ > -+({ \ > -+ size_t __len = (len); \ > -+ void *__ret; \ > -+ if (__builtin_constant_p(len) && __len >= 64) \ > -+ __ret = memmove((dst), (src), __len); \ > -+ else \ > -+ __ret = __builtin_memmove((dst), (src), __len); \ > -+ __ret; \ > -+}) > -+ > -+#define __HAVE_ARCH_MEMCMP > -+#define memcmp(src1, src2, len) __builtin_memcmp((src1), (src2), (len)) > -+#endif > -+ > - #endif /* _ASM_STRING_H */ > ---- a/arch/mips/lib/Makefile > -+++ b/arch/mips/lib/Makefile > -@@ -5,7 +5,7 @@ > - > - lib-y += bitops.o csum_partial.o delay.o memcpy.o memset.o \ > - mips-atomic.o strncpy_user.o \ > -- strnlen_user.o uncached.o > -+ strnlen_user.o uncached.o memcmp.o > - > - obj-y += iomap_copy.o > - obj-$(CONFIG_PCI) += iomap-pci.o > ---- /dev/null > -+++ b/arch/mips/lib/memcmp.c > -@@ -0,0 +1,22 @@ > -+/* > -+ * copied from linux/lib/string.c > -+ * > -+ * Copyright (C) 1991, 1992 Linus Torvalds > -+ */ > -+ > -+#include <linux/module.h> > -+#include <linux/string.h> > -+ > -+#undef memcmp > -+int memcmp(const void *cs, const void *ct, size_t count) > -+{ > -+ const unsigned char *su1, *su2; > -+ int res = 0; > -+ > -+ for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--) > -+ if ((res = *su1 - *su2) != 0) > -+ break; > -+ return res; > -+} > -+EXPORT_SYMBOL(memcmp); > -+ > -- > 2.30.2 > > > _______________________________________________ > openwrt-devel mailing list > openwrt-devel@lists.openwrt.org > https://lists.openwrt.org/mailman/listinfo/openwrt-devel
diff --git a/target/linux/generic/backport-5.4/310-mips-Kconfig-Add-ARCH_HAS_FORTIFY_SOURCE.patch b/target/linux/generic/backport-5.4/310-mips-Kconfig-Add-ARCH_HAS_FORTIFY_SOURCE.patch new file mode 100644 index 000000000000..e02f10354376 --- /dev/null +++ b/target/linux/generic/backport-5.4/310-mips-Kconfig-Add-ARCH_HAS_FORTIFY_SOURCE.patch @@ -0,0 +1,32 @@ +From a8d2bb0559b5fefa5173ff4e7496cc6250db2c8a Mon Sep 17 00:00:00 2001 +From: Dmitry Korotin <dkorotin@wavecomp.com> +Date: Thu, 12 Sep 2019 22:53:45 +0000 +Subject: [PATCH] mips: Kconfig: Add ARCH_HAS_FORTIFY_SOURCE + +FORTIFY_SOURCE detects various overflows at compile and run time. +(6974f0c4555e ("include/linux/string.h: +add the option of fortified string.h functions) + +ARCH_HAS_FORTIFY_SOURCE means that the architecture can be built and +run with CONFIG_FORTIFY_SOURCE. + +Since mips can be built and run with that flag, +select ARCH_HAS_FORTIFY_SOURCE as default. + +Signed-off-by: Dmitry Korotin <dkorotin@wavecomp.com> +Signed-off-by: Paul Burton <paul.burton@mips.com> +Cc: linux-mips@vger.kernel.org +--- + arch/mips/Kconfig | 1 + + 1 file changed, 1 insertion(+) + +--- a/arch/mips/Kconfig ++++ b/arch/mips/Kconfig +@@ -7,6 +7,7 @@ config MIPS + select ARCH_CLOCKSOURCE_DATA + select ARCH_HAS_TICK_BROADCAST if GENERIC_CLOCKEVENTS_BROADCAST + select ARCH_HAS_UBSAN_SANITIZE_ALL ++ select ARCH_HAS_FORTIFY_SOURCE + select ARCH_SUPPORTS_UPROBES + select ARCH_USE_BUILTIN_BSWAP + select ARCH_USE_CMPXCHG_LOCKREF if 64BIT diff --git a/target/linux/generic/backport-5.4/311-MIPS-Fix-exception-handler-memcpy.patch b/target/linux/generic/backport-5.4/311-MIPS-Fix-exception-handler-memcpy.patch new file mode 100644 index 000000000000..5a6725c7a072 --- /dev/null +++ b/target/linux/generic/backport-5.4/311-MIPS-Fix-exception-handler-memcpy.patch @@ -0,0 +1,107 @@ +From e01c91a360793298c9e1656a61faceff01487a43 Mon Sep 17 00:00:00 2001 +From: Ben Hutchings <ben@decadent.org.uk> +Date: Sat, 23 May 2020 23:50:34 +0800 +Subject: [PATCH] MIPS: Fix exception handler memcpy() + +The exception handler subroutines are declared as a single char, but +when copied to the required addresses the copy length is 0x80. + +When range checks are enabled for memcpy() this results in a build +failure, with error messages such as: + +In file included from arch/mips/mti-malta/malta-init.c:15: +In function 'memcpy', + inlined from 'mips_nmi_setup' at arch/mips/mti-malta/malta-init.c:98:2: +include/linux/string.h:376:4: error: call to '__read_overflow2' declared with attribute error: detected read beyond size of object passed as 2nd parameter + 376 | __read_overflow2(); + | ^~~~~~~~~~~~~~~~~~ + +Change the declarations to use type char[]. + +Signed-off-by: Ben Hutchings <ben@decadent.org.uk> +Signed-off-by: YunQiang Su <syq@debian.org> +Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de> +--- + arch/mips/loongson64/common/init.c | 4 ++-- + arch/mips/mti-malta/malta-init.c | 8 ++++---- + arch/mips/pistachio/init.c | 8 ++++---- + 3 files changed, 10 insertions(+), 10 deletions(-) + +--- a/arch/mips/loongson64/common/init.c ++++ b/arch/mips/loongson64/common/init.c +@@ -18,10 +18,10 @@ unsigned long __maybe_unused _loongson_a + static void __init mips_nmi_setup(void) + { + void *base; +- extern char except_vec_nmi; ++ extern char except_vec_nmi[]; + + base = (void *)(CAC_BASE + 0x380); +- memcpy(base, &except_vec_nmi, 0x80); ++ memcpy(base, except_vec_nmi, 0x80); + flush_icache_range((unsigned long)base, (unsigned long)base + 0x80); + } + +--- a/arch/mips/mti-malta/malta-init.c ++++ b/arch/mips/mti-malta/malta-init.c +@@ -90,24 +90,24 @@ static void __init console_config(void) + static void __init mips_nmi_setup(void) + { + void *base; +- extern char except_vec_nmi; ++ extern char except_vec_nmi[]; + + base = cpu_has_veic ? + (void *)(CAC_BASE + 0xa80) : + (void *)(CAC_BASE + 0x380); +- memcpy(base, &except_vec_nmi, 0x80); ++ memcpy(base, except_vec_nmi, 0x80); + flush_icache_range((unsigned long)base, (unsigned long)base + 0x80); + } + + static void __init mips_ejtag_setup(void) + { + void *base; +- extern char except_vec_ejtag_debug; ++ extern char except_vec_ejtag_debug[]; + + base = cpu_has_veic ? + (void *)(CAC_BASE + 0xa00) : + (void *)(CAC_BASE + 0x300); +- memcpy(base, &except_vec_ejtag_debug, 0x80); ++ memcpy(base, except_vec_ejtag_debug, 0x80); + flush_icache_range((unsigned long)base, (unsigned long)base + 0x80); + } + +--- a/arch/mips/pistachio/init.c ++++ b/arch/mips/pistachio/init.c +@@ -83,12 +83,12 @@ phys_addr_t mips_cdmm_phys_base(void) + static void __init mips_nmi_setup(void) + { + void *base; +- extern char except_vec_nmi; ++ extern char except_vec_nmi[]; + + base = cpu_has_veic ? + (void *)(CAC_BASE + 0xa80) : + (void *)(CAC_BASE + 0x380); +- memcpy(base, &except_vec_nmi, 0x80); ++ memcpy(base, except_vec_nmi, 0x80); + flush_icache_range((unsigned long)base, + (unsigned long)base + 0x80); + } +@@ -96,12 +96,12 @@ static void __init mips_nmi_setup(void) + static void __init mips_ejtag_setup(void) + { + void *base; +- extern char except_vec_ejtag_debug; ++ extern char except_vec_ejtag_debug[]; + + base = cpu_has_veic ? + (void *)(CAC_BASE + 0xa00) : + (void *)(CAC_BASE + 0x300); +- memcpy(base, &except_vec_ejtag_debug, 0x80); ++ memcpy(base, except_vec_ejtag_debug, 0x80); + flush_icache_range((unsigned long)base, + (unsigned long)base + 0x80); + } diff --git a/target/linux/generic/hack-5.4/301-mips_image_cmdline_hack.patch b/target/linux/generic/hack-5.4/301-mips_image_cmdline_hack.patch index da0aa3425064..ada65cd2a08a 100644 --- a/target/linux/generic/hack-5.4/301-mips_image_cmdline_hack.patch +++ b/target/linux/generic/hack-5.4/301-mips_image_cmdline_hack.patch @@ -10,7 +10,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org> --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig -@@ -1158,6 +1158,10 @@ config SYNC_R4K +@@ -1159,6 +1159,10 @@ config SYNC_R4K config MIPS_MACHINE def_bool n diff --git a/target/linux/generic/pending-5.4/103-MIPS-select-CPU_MIPS64-for-remaining-MIPS64-CPUs.patch b/target/linux/generic/pending-5.4/103-MIPS-select-CPU_MIPS64-for-remaining-MIPS64-CPUs.patch index 3b0431669283..4e7a532156d6 100644 --- a/target/linux/generic/pending-5.4/103-MIPS-select-CPU_MIPS64-for-remaining-MIPS64-CPUs.patch +++ b/target/linux/generic/pending-5.4/103-MIPS-select-CPU_MIPS64-for-remaining-MIPS64-CPUs.patch @@ -25,7 +25,7 @@ Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig -@@ -2036,7 +2036,8 @@ config CPU_MIPS32 +@@ -2037,7 +2037,8 @@ config CPU_MIPS32 config CPU_MIPS64 bool diff --git a/target/linux/generic/pending-5.4/300-mips_expose_boot_raw.patch b/target/linux/generic/pending-5.4/300-mips_expose_boot_raw.patch index 476ae501d645..7b9ae65c60b0 100644 --- a/target/linux/generic/pending-5.4/300-mips_expose_boot_raw.patch +++ b/target/linux/generic/pending-5.4/300-mips_expose_boot_raw.patch @@ -9,7 +9,7 @@ Acked-by: Rob Landley <rob@landley.net> --- --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig -@@ -1068,9 +1068,6 @@ config FW_ARC +@@ -1069,9 +1069,6 @@ config FW_ARC config ARCH_MAY_HAVE_PC_FDC bool @@ -19,7 +19,7 @@ Acked-by: Rob Landley <rob@landley.net> config CEVT_BCM1480 bool -@@ -3043,6 +3040,18 @@ choice +@@ -3044,6 +3041,18 @@ choice bool "Extend builtin kernel arguments with bootloader arguments" endchoice diff --git a/target/linux/generic/pending-5.4/306-mips_mem_functions_performance.patch b/target/linux/generic/pending-5.4/306-mips_mem_functions_performance.patch deleted file mode 100644 index 611aa0314f99..000000000000 --- a/target/linux/generic/pending-5.4/306-mips_mem_functions_performance.patch +++ /dev/null @@ -1,106 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Subject: [PATCH] mips: allow the compiler to optimize memset, memcmp, memcpy for better performance and (in some instances) smaller code - -lede-commit: 07e59c7bc7f375f792ec9734be42fe4fa391a8bb -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - arch/mips/boot/compressed/Makefile | 3 ++- - arch/mips/include/asm/string.h | 38 ++++++++++++++++++++++++++++++++++++++ - arch/mips/lib/Makefile | 2 +- - arch/mips/lib/memcmp.c | 22 ++++++++++++++++++++++ - 4 files changed, 63 insertions(+), 2 deletions(-) - create mode 100644 arch/mips/lib/memcmp.c - ---- a/arch/mips/boot/compressed/Makefile -+++ b/arch/mips/boot/compressed/Makefile -@@ -23,7 +23,8 @@ KBUILD_CFLAGS := $(filter-out -pg, $(KBU - KBUILD_CFLAGS := $(filter-out -fstack-protector, $(KBUILD_CFLAGS)) - - KBUILD_CFLAGS := $(KBUILD_CFLAGS) -D__KERNEL__ \ -- -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -D"VMLINUX_LOAD_ADDRESS_ULL=$(VMLINUX_LOAD_ADDRESS)ull" -+ -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) -D"VMLINUX_LOAD_ADDRESS_ULL=$(VMLINUX_LOAD_ADDRESS)ull" \ -+ -D__ZBOOT__ - - KBUILD_AFLAGS := $(KBUILD_AFLAGS) -D__ASSEMBLY__ \ - -DBOOT_HEAP_SIZE=$(BOOT_HEAP_SIZE) \ ---- a/arch/mips/include/asm/string.h -+++ b/arch/mips/include/asm/string.h -@@ -19,4 +19,42 @@ extern void *memcpy(void *__to, __const_ - #define __HAVE_ARCH_MEMMOVE - extern void *memmove(void *__dest, __const__ void *__src, size_t __n); - -+#ifndef __ZBOOT__ -+#define memset(__s, __c, len) \ -+({ \ -+ size_t __len = (len); \ -+ void *__ret; \ -+ if (__builtin_constant_p(len) && __len >= 64) \ -+ __ret = memset((__s), (__c), __len); \ -+ else \ -+ __ret = __builtin_memset((__s), (__c), __len); \ -+ __ret; \ -+}) -+ -+#define memcpy(dst, src, len) \ -+({ \ -+ size_t __len = (len); \ -+ void *__ret; \ -+ if (__builtin_constant_p(len) && __len >= 64) \ -+ __ret = memcpy((dst), (src), __len); \ -+ else \ -+ __ret = __builtin_memcpy((dst), (src), __len); \ -+ __ret; \ -+}) -+ -+#define memmove(dst, src, len) \ -+({ \ -+ size_t __len = (len); \ -+ void *__ret; \ -+ if (__builtin_constant_p(len) && __len >= 64) \ -+ __ret = memmove((dst), (src), __len); \ -+ else \ -+ __ret = __builtin_memmove((dst), (src), __len); \ -+ __ret; \ -+}) -+ -+#define __HAVE_ARCH_MEMCMP -+#define memcmp(src1, src2, len) __builtin_memcmp((src1), (src2), (len)) -+#endif -+ - #endif /* _ASM_STRING_H */ ---- a/arch/mips/lib/Makefile -+++ b/arch/mips/lib/Makefile -@@ -5,7 +5,7 @@ - - lib-y += bitops.o csum_partial.o delay.o memcpy.o memset.o \ - mips-atomic.o strncpy_user.o \ -- strnlen_user.o uncached.o -+ strnlen_user.o uncached.o memcmp.o - - obj-y += iomap_copy.o - obj-$(CONFIG_PCI) += iomap-pci.o ---- /dev/null -+++ b/arch/mips/lib/memcmp.c -@@ -0,0 +1,22 @@ -+/* -+ * copied from linux/lib/string.c -+ * -+ * Copyright (C) 1991, 1992 Linus Torvalds -+ */ -+ -+#include <linux/module.h> -+#include <linux/string.h> -+ -+#undef memcmp -+int memcmp(const void *cs, const void *ct, size_t count) -+{ -+ const unsigned char *su1, *su2; -+ int res = 0; -+ -+ for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--) -+ if ((res = *su1 - *su2) != 0) -+ break; -+ return res; -+} -+EXPORT_SYMBOL(memcmp); -+
CONFIG_FORTIFY_SOURCE=y is already set in the generic kernel configuration, but it is not working for MIPS on kernel 5.4, support for MIPS was only added with kernel 5.5, other architectures like aarch64 support FORTIFY_SOURCE already since some time. This patch adds support for FORTIFY_SOURCE to MIPS with kernel 5.4, kernel 5.10 already supports this and needs no changes. This backports one patch from kernel 5.5 and one fix from 5.8 to make fortify source also work on our kernel 5.4. The changes are not compatible with the 306-mips_mem_functions_performance.patch patch which was also removed with kernel 5.10, probably because of the same problems. I think it is not needed anyway as the compiler should automatically optimize the calls to memset(), memcpy() and memmove() even when not explicitly telling the compiler to use the build in variant. Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> --- I would like to backport this to 21.02 too. ...-Kconfig-Add-ARCH_HAS_FORTIFY_SOURCE.patch | 32 ++++++ ...11-MIPS-Fix-exception-handler-memcpy.patch | 107 ++++++++++++++++++ .../301-mips_image_cmdline_hack.patch | 2 +- ...CPU_MIPS64-for-remaining-MIPS64-CPUs.patch | 2 +- .../300-mips_expose_boot_raw.patch | 4 +- .../306-mips_mem_functions_performance.patch | 106 ----------------- 6 files changed, 143 insertions(+), 110 deletions(-) create mode 100644 target/linux/generic/backport-5.4/310-mips-Kconfig-Add-ARCH_HAS_FORTIFY_SOURCE.patch create mode 100644 target/linux/generic/backport-5.4/311-MIPS-Fix-exception-handler-memcpy.patch delete mode 100644 target/linux/generic/pending-5.4/306-mips_mem_functions_performance.patch