[RFC v2] aarch64: enforce >=64K guard size

Szabolcs Nagy szabolcs.nagy@arm.com
Thu Dec 14 16:16:00 GMT 2017


v2:
- only change guard size on aarch64
- don't report the inflated guard size
- this is on top of
https://sourceware.org/ml/libc-alpha/2017-12/msg00368.html

There are several compiler implementations that allow large stack
allocations to jump over the guard page at the end of the stack and
corrupt memory beyond that. See CVE-2017-1000364.

Compilers can emit code to probe the stack such that the guard page
cannot be skipped, but on aarch64 the probe interval is 64K instead
of the minimum supported page size (4K).

This patch enforces at least 64K guard on aarch64 unless the guard
is disabled by setting its size to 0.  For backward compatibility
reasons the increased guard is not reported, so it is only observable
by exhausting the address space or parsing /proc/self/maps on linux.

The patch does not affect threads with user allocated stacks.

2017-12-14  Szabolcs Nagy  <szabolcs.nagy@arm.com>

	* nptl/allocatestack.c (allocate_stack): Use ARCH_MIN_GUARD_SIZE.
	* nptl/descr.h (ARCH_MIN_GUARD_SIZE): Define.
	* sysdeps/aarch64/nptl/pthreaddef.h (ARCH_MIN_GUARD_SIZE): Define.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: guard.diff
Type: text/x-patch
Size: 2760 bytes
Desc: not available
URL: <http://sourceware.org/pipermail/libc-alpha/attachments/20171214/817b49e5/attachment.bin>


More information about the Libc-alpha mailing list