linux/arch/parisc
Helge Deller 441b34775e parisc,metag: Fix crashes due to stack randomization on stack-grows-upwards architectures
commit d045c77c1a upstream.

On architectures where the stack grows upwards (CONFIG_STACK_GROWSUP=y,
currently parisc and metag only) stack randomization sometimes leads to crashes
when the stack ulimit is set to lower values than STACK_RND_MASK (which is 8 MB
by default if not defined in arch-specific headers).

The problem is, that when the stack vm_area_struct is set up in fs/exec.c, the
additional space needed for the stack randomization (as defined by the value of
STACK_RND_MASK) was not taken into account yet and as such, when the stack
randomization code added a random offset to the stack start, the stack
effectively got smaller than what the user defined via rlimit_max(RLIMIT_STACK)
which then sometimes leads to out-of-stack situations and crashes.

This patch fixes it by adding the maximum possible amount of memory (based on
STACK_RND_MASK) which theoretically could be added by the stack randomization
code to the initial stack size. That way, the user-defined stack size is always
guaranteed to be at minimum what is defined via rlimit_max(RLIMIT_STACK).

This bug is currently not visible on the metag architecture, because on metag
STACK_RND_MASK is defined to 0 which effectively disables stack randomization.

The changes to fs/exec.c are inside an "#ifdef CONFIG_STACK_GROWSUP"
section, so it does not affect other platformws beside those where the
stack grows upwards (parisc and metag).

Signed-off-by: Helge Deller <deller@gmx.de>
Cc: linux-parisc@vger.kernel.org
Cc: James Hogan <james.hogan@imgtec.com>
Cc: linux-metag@vger.kernel.org
Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
History 2015-05-28 10:00:03 +01:00
..
configs USB: remove CONFIG_USB_DEBUG from defconfig files 2014-05-28 09:40:45 -07:00
hpux execve: use 'struct filename *' for executable name passing 2014-02-05 12:54:53 -08:00
include parisc,metag: Fix crashes due to stack randomization on stack-grows-upwards architectures 2015-05-28 10:00:03 +01:00
kernel parisc,metag: Fix crashes due to stack randomization on stack-grows-upwards architectures 2015-05-28 10:00:03 +01:00
lib parisc: Replace __get_cpu_var uses for address calculation 2014-04-03 20:50:33 +02:00
math-emu parisc: remove duplicate define 2013-11-07 22:28:15 +01:00
mm vm: add VM_FAULT_SIGSEGV handling support 2015-02-04 10:58:27 +00:00
oprofile oprofile: more whitespace fixes 2008-10-15 20:55:51 +02:00
defpalo.conf parisc: switch to gzip-compressed vmlinuz kernel 2013-07-09 22:09:20 +02:00
install.sh parisc: make "make install" not depend on vmlinux 2013-11-07 22:28:06 +01:00
Kconfig Merge branch 'parisc-3.15-4' of git://git.kernel.org/pub/scm/linux/kernel/git/deller/parisc-linux 2014-05-20 14:35:28 +09:00
Kconfig.debug consolidate per-arch stack overflow debugging options 2013-07-04 11:25:39 -07:00
Makefile parisc: Only use -mfast-indirect-calls option for 32-bit kernel builds 2014-10-05 13:41:08 -07:00
nm Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00