linux/arch/parisc
Helge Deller 6fa3566b04 parisc,metag: Fix crashes due to stack randomization on stack-grows-upwards architectures
[ Upstream commit d045c77c1a ]

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
Cc: stable@vger.kernel.org # v3.16+
Signed-off-by: Sasha Levin <sasha.levin@oracle.com>
History 2015-06-10 13:42:33 -04:00
..
configs parisc: Update defconfigs which were missing CONFIG_NET. 2014-09-24 14:34:29 -04:00
hpux parisc: sys_hpux: NUL terminator is one past the end 2014-08-27 14:33:46 +02:00
include parisc,metag: Fix crashes due to stack randomization on stack-grows-upwards architectures 2015-06-10 13:42:33 -04:00
kernel parisc,metag: Fix crashes due to stack randomization on stack-grows-upwards architectures 2015-06-10 13:42:33 -04: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-05 22:36:01 -08: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 parisc: Wire up seccomp, getrandom and memfd_create syscalls 2014-08-27 14:39:56 +02: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-09-23 21:38:26 +02:00
nm Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00