mirror of
https://github.com/xemu-project/xemu.git
synced 2024-11-27 05:20:50 +00:00
linux-user/hppa: Allow PROT_GROWSUP and PROT_GROWSDOWN in mprotect()
The hppa platform uses an upwards-growing stack and required in Linux kernels < 5.18 an executable stack for signal processing. For that some executables and libraries are marked to have an executable stack, for which glibc uses the mprotect() syscall to mark the stack like this: mprotect(xfa000000,4096,PROT_EXEC|PROT_READ|PROT_WRITE|PROT_GROWSUP). Currently qemu will return -TARGET_EINVAL for this syscall because of the checks in validate_prot_to_pageflags(), which doesn't allow the PROT_GROWSUP or PROT_GROWSDOWN flags and thus triggers this error in the guest: error while loading shared libraries: libc.so.6: cannot enable executable stack as shared object requires: Invalid argument Allow mprotect() to handle both flags and thus fix the guest. The glibc tst-execstack testcase can be used to reproduce the issue. Signed-off-by: Helge Deller <deller@gmx.de> Message-Id: <20220924114501.21767-7-deller@gmx.de> [lvivier: s/elif TARGET_HPPA/elif defined(TARGET_HPPA)/] Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
parent
0a3346b593
commit
4c184e70ad
@ -106,6 +106,8 @@ static int validate_prot_to_pageflags(int *host_prot, int prot)
|
||||
page_flags |= PAGE_MTE;
|
||||
}
|
||||
}
|
||||
#elif defined(TARGET_HPPA)
|
||||
valid |= PROT_GROWSDOWN | PROT_GROWSUP;
|
||||
#endif
|
||||
|
||||
return prot & ~valid ? 0 : page_flags;
|
||||
|
Loading…
Reference in New Issue
Block a user