mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 15:23:53 -06:00
linux-user: Pass ka_restorer to do_sigaction
The value of ka_restorer needs to be saved in sigact_table. At the moment, the attempt to save it in do_syscall is improperly clobbering user memory. Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Reviewed-by: Alex Bennée <alex.bennee@linaro.org> Message-Id: <20210422230227.314751-4-richard.henderson@linaro.org> [lv: remove tab] Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
parent
f20a9ca6d0
commit
02fb28e8ef
3 changed files with 11 additions and 15 deletions
|
@ -842,7 +842,7 @@ abi_long do_sigaltstack(abi_ulong uss_addr, abi_ulong uoss_addr,
|
|||
|
||||
/* do_sigaction() return target values and host errnos */
|
||||
int do_sigaction(int sig, const struct target_sigaction *act,
|
||||
struct target_sigaction *oact)
|
||||
struct target_sigaction *oact, abi_ulong ka_restorer)
|
||||
{
|
||||
struct target_sigaction *k;
|
||||
struct sigaction act1;
|
||||
|
@ -875,6 +875,9 @@ int do_sigaction(int sig, const struct target_sigaction *act,
|
|||
__get_user(k->sa_flags, &act->sa_flags);
|
||||
#ifdef TARGET_ARCH_HAS_SA_RESTORER
|
||||
__get_user(k->sa_restorer, &act->sa_restorer);
|
||||
#endif
|
||||
#ifdef TARGET_ARCH_HAS_KA_RESTORER
|
||||
k->ka_restorer = ka_restorer;
|
||||
#endif
|
||||
/* To be swapped in target_to_host_sigset. */
|
||||
k->sa_mask = act->sa_mask;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue