Fix guard alignment in allocate_stack when stack grows up.

This commit is contained in:
John David Anglin 2017-07-15 12:40:13 -04:00
parent 2759a2c1d8
commit 075385f98a
2 changed files with 11 additions and 2 deletions

View File

@ -1,5 +1,8 @@
2017-07-15 John David Anglin <danglin@gcc.gnu.org>
* nptl/allocatestack.c (allocate_stack): Align old and new guard
addresses to page boundaries when the stack grows up.
* sysdeps/hppa/math-tests.h: New.
2017-07-14 DJ Delorie <dj@redhat.com>

View File

@ -697,8 +697,14 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,
prot) != 0)
goto mprot_error;
#elif _STACK_GROWS_UP
if (__mprotect ((char *) pd - pd->guardsize,
pd->guardsize - guardsize, prot) != 0)
char *new_guard = (char *)(((uintptr_t) pd - guardsize)
& ~pagesize_m1);
char *old_guard = (char *)(((uintptr_t) pd - pd->guardsize)
& ~pagesize_m1);
/* The guard size difference might be > 0, but once rounded
to the nearest page the size difference might be zero. */
if (new_guard > old_guard
&& mprotect (old_guard, new_guard - old_guard, prot) != 0)
goto mprot_error;
#endif