mirror of
https://sourceware.org/git/glibc.git
synced 2025-10-27 12:15:39 +03:00
elf: early conversion of elf p_flags to mprotect flags
This patch replaces _dl_stack_flags global variable by _dl_stack_prot_flags. The advantage is that any convertion from p_flags to final used mprotect flags occurs at loading of p_flags. It avoids repeated spurious convertions of _dl_stack_flags, for example in allocate_thread_stack. This modification was suggested in: https://sourceware.org/pipermail/libc-alpha/2025-March/165537.html Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
This commit is contained in:
committed by
Adhemerval Zanella
parent
921e251e8f
commit
3b2b88ccee
@@ -64,11 +64,10 @@ support_stack_alloc (size_t size)
|
||||
MAP_PRIVATE|MAP_ANONYMOUS|MAP_NORESERVE|MAP_STACK,
|
||||
-1);
|
||||
/* Some architecture still requires executable stack for the signal return
|
||||
trampoline, although PF_X could be overridden if PT_GNU_STACK is present.
|
||||
However since glibc does not export such information with a proper ABI,
|
||||
it uses the historical permissions. */
|
||||
int prot = PROT_READ | PROT_WRITE
|
||||
| (DEFAULT_STACK_PERMS & PF_X ? PROT_EXEC : 0);
|
||||
trampoline, although PROT_EXEC could be overridden if PT_GNU_STACK is
|
||||
present. However since glibc does not export such information with a
|
||||
proper ABI, it uses the historical permissions. */
|
||||
int prot = DEFAULT_STACK_PROT_PERMS;
|
||||
xmprotect (alloc_base + guardsize, stacksize, prot);
|
||||
memset (alloc_base + guardsize, 0xA5, stacksize);
|
||||
return (struct support_stack) { alloc_base + guardsize, stacksize, guardsize };
|
||||
|
||||
Reference in New Issue
Block a user