[PATCH] MIPS: Disable stack checks on MIPS kernels

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Joshua Kinard <kumba@xxxxxxxxxx>

Disable stack checking on MIPS kernels.  Some distribution toolchains
might pass the -fstack-check option to gcc.  This results in a
store-doubleword instruction being emitted at the top of all
functions that checks the available stack space.  E.g.,

  a80000000001d740 <per_cpu_init>:
  a80000000001d740:       ffa0bfc0        sd      zero,-16448(sp)
  a80000000001d744:       2405ffc9        li      a1,-55
  a80000000001d748:       67bdffc0        daddiu  sp,sp,-64

Generally, this is undesirable, and especially on the SGI IP27
platform, it will trigger a NULL pointer dereference in
'_raw_spin_lock_irq' during early init.

Signed-off-by: Joshua Kinard <kumba@xxxxxxxxxx>
Suggested-by: James Hogan <james.hogan@xxxxxxxxxx>
---
 arch/mips/Makefile |   15 +++++++++++++++
 1 file changed, 15 insertions(+)

linux-mips-4.10-disable-stack-check.patch
diff --git a/arch/mips/Makefile b/arch/mips/Makefile
index 1a6bac7b076f..6b2a30442105 100644
--- a/arch/mips/Makefile
+++ b/arch/mips/Makefile
@@ -131,6 +131,21 @@ cflags-$(CONFIG_CPU_LITTLE_ENDIAN)	+= $(shell $(CC) -dumpmachine |grep -q 'mips.
 
 cflags-$(CONFIG_SB1XXX_CORELIS)	+= $(call cc-option,-mno-sched-prolog) \
 				   -fno-omit-frame-pointer
+
+# Some distribution-specific toolchains might pass the -fstack-check
+# option during the build, which adds a simple stack-probe at the beginning
+# of every function.  This stack probe is to ensure that there is enough
+# stack space, else a SEGV is generated.  This is not desirable for MIPS
+# as kernel stacks are small, placed in unmapped virtual memory, and do not
+# grow when overflowed.  Especially on SGI IP27 platforms, this check will
+# lead to a NULL pointer dereference in _raw_spin_lock_irq.
+#
+# In disassembly, this stack probe appears at the top of a function as:
+#    sd		zero,<offset>(sp)
+# Where <offset> is a negative value.
+#
+cflags-y += -fno-stack-check
+
 #
 # CPU-dependent compiler/assembler options for optimization.
 #





[Index of Archives]     [Linux MIPS Home]     [LKML Archive]     [Linux ARM Kernel]     [Linux ARM]     [Linux]     [Git]     [Yosemite News]     [Linux SCSI]     [Linux Hams]

  Powered by Linux