Message ID | 1441497448-32489-29-git-send-email-T.E.Baldwin99@members.leeds.ac.uk |
---|---|
State | New |
Headers | show |
On 6 September 2015 at 00:57, Timothy E Baldwin <T.E.Baldwin99@members.leeds.ac.uk> wrote: > Signed-off-by: Timothy Edward Baldwin <T.E.Baldwin99@members.leeds.ac.uk> > --- > linux-user/signal.c | 12 +++++++++--- > 1 file changed, 9 insertions(+), 3 deletions(-) > > diff --git a/linux-user/signal.c b/linux-user/signal.c > index 15bd082..fc37f3b 100644 > --- a/linux-user/signal.c > +++ b/linux-user/signal.c > @@ -629,7 +629,7 @@ out: > return ret; > } > > -/* do_sigaction() return host values and errnos */ > +/* do_sigaction() return target values and host errnos */ > int do_sigaction(int sig, const struct target_sigaction *act, > struct target_sigaction *oact) > { > @@ -638,8 +638,14 @@ int do_sigaction(int sig, const struct target_sigaction *act, > int host_sig; > int ret = 0; > > - if (sig < 1 || sig > TARGET_NSIG || sig == TARGET_SIGKILL || sig == TARGET_SIGSTOP) > - return -EINVAL; > + if (sig < 1 || sig > TARGET_NSIG || sig == TARGET_SIGKILL || sig == TARGET_SIGSTOP) { > + return -TARGET_EINVAL; > + } > + > + if (block_signals()) { > + return -TARGET_ERESTARTSYS; > + } > + > k = &sigact_table[sig - 1]; > #if defined(DEBUG_SIGNAL) > fprintf(stderr, "sigaction sig=%d act=0x%p, oact=0x%p\n", This doesn't look right -- we change this function from returning host errnos to returning guest errnos, but we haven't changed any of its callers. thanks -- PMM
diff --git a/linux-user/signal.c b/linux-user/signal.c index 15bd082..fc37f3b 100644 --- a/linux-user/signal.c +++ b/linux-user/signal.c @@ -629,7 +629,7 @@ out: return ret; } -/* do_sigaction() return host values and errnos */ +/* do_sigaction() return target values and host errnos */ int do_sigaction(int sig, const struct target_sigaction *act, struct target_sigaction *oact) { @@ -638,8 +638,14 @@ int do_sigaction(int sig, const struct target_sigaction *act, int host_sig; int ret = 0; - if (sig < 1 || sig > TARGET_NSIG || sig == TARGET_SIGKILL || sig == TARGET_SIGSTOP) - return -EINVAL; + if (sig < 1 || sig > TARGET_NSIG || sig == TARGET_SIGKILL || sig == TARGET_SIGSTOP) { + return -TARGET_EINVAL; + } + + if (block_signals()) { + return -TARGET_ERESTARTSYS; + } + k = &sigact_table[sig - 1]; #if defined(DEBUG_SIGNAL) fprintf(stderr, "sigaction sig=%d act=0x%p, oact=0x%p\n",
Signed-off-by: Timothy Edward Baldwin <T.E.Baldwin99@members.leeds.ac.uk> --- linux-user/signal.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-)