Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5d10ad62 authored by Helge Deller's avatar Helge Deller Committed by Greg Kroah-Hartman
Browse files

Allow stack to grow up to address space limit



commit bd726c90b6b8ce87602208701b208a208e6d5600 upstream.

Fix expand_upwards() on architectures with an upward-growing stack (parisc,
metag and partly IA-64) to allow the stack to reliably grow exactly up to
the address space limit given by TASK_SIZE.

Signed-off-by: default avatarHelge Deller <deller@gmx.de>
Acked-by: default avatarHugh Dickins <hughd@google.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent cfc0eb40
Loading
Loading
Loading
Loading
+8 −5
Original line number Diff line number Diff line
@@ -2224,16 +2224,19 @@ int expand_upwards(struct vm_area_struct *vma, unsigned long address)
	if (!(vma->vm_flags & VM_GROWSUP))
		return -EFAULT;

	/* Guard against wrapping around to address 0. */
	/* Guard against exceeding limits of the address space. */
	address &= PAGE_MASK;
	address += PAGE_SIZE;
	if (!address)
	if (address >= TASK_SIZE)
		return -ENOMEM;
	address += PAGE_SIZE;

	/* Enforce stack_guard_gap */
	gap_addr = address + stack_guard_gap;
	if (gap_addr < address)
		return -ENOMEM;

	/* Guard against overflow */
	if (gap_addr < address || gap_addr > TASK_SIZE)
		gap_addr = TASK_SIZE;

	next = vma->vm_next;
	if (next && next->vm_start < gap_addr) {
		if (!(next->vm_flags & VM_GROWSUP))