Message ID | 1309260117-28334-1-git-send-email-peter.maydell@linaro.org |
---|---|
State | New |
Headers | show |
On Tue, Jun 28, 2011 at 12:21:57PM +0100, Peter Maydell wrote: > Enforce the same restriction on the size of the sigset passed to > pselect6 as the Linux kernel does. This is both correct and silences > a gcc 4.6 warning about a write-only variable. Odd but true, after all the trouble of passing the size as packed variable, even the kernel bothers nothing but check that it matches with sizeof(sigset_t)... I'll include this and your other two patches for the next round. Riku > Signed-off-by: Peter Maydell <peter.maydell@linaro.org> > --- > This really is the last gcc 4.6 warning fix! > > linux-user/syscall.c | 5 +++++ > 1 files changed, 5 insertions(+), 0 deletions(-) > > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > index fed7a8f..feb2501 100644 > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -5684,6 +5684,11 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, > > if (arg_sigset) { > sig.set = &set; > + if (arg_sigsize != sizeof(*target_sigset)) { > + /* Like the kernel, we enforce correct size sigsets */ > + ret = -TARGET_EINVAL; > + goto fail; > + } > target_sigset = lock_user(VERIFY_READ, arg_sigset, > sizeof(*target_sigset), 1); > if (!target_sigset) { > -- > 1.7.5.3
On 28 June 2011 12:51, Riku Voipio <riku.voipio@iki.fi> wrote: > On Tue, Jun 28, 2011 at 12:21:57PM +0100, Peter Maydell wrote: >> Enforce the same restriction on the size of the sigset passed to >> pselect6 as the Linux kernel does. This is both correct and silences >> a gcc 4.6 warning about a write-only variable. > > Odd but true, after all the trouble of passing the size as packed variable, > even the kernel bothers nothing but check that it matches with > sizeof(sigset_t)... I assume they're leaving the door open for implementing that properly at some later date. Incidentally, if the qemu target's sigset_t and the host's sigset_t are different sizes then not just this syscall but I suspect all the others that use sigset_t will have trouble. Luckily only one flavour of MIPS has a non-standard sigset_t size :-) -- PMM
Acked-by: Mike Frysinger <vapier@gentoo.org>
-mike
diff --git a/linux-user/syscall.c b/linux-user/syscall.c index fed7a8f..feb2501 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -5684,6 +5684,11 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, if (arg_sigset) { sig.set = &set; + if (arg_sigsize != sizeof(*target_sigset)) { + /* Like the kernel, we enforce correct size sigsets */ + ret = -TARGET_EINVAL; + goto fail; + } target_sigset = lock_user(VERIFY_READ, arg_sigset, sizeof(*target_sigset), 1); if (!target_sigset) {
Enforce the same restriction on the size of the sigset passed to pselect6 as the Linux kernel does. This is both correct and silences a gcc 4.6 warning about a write-only variable. Signed-off-by: Peter Maydell <peter.maydell@linaro.org> --- This really is the last gcc 4.6 warning fix! linux-user/syscall.c | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-)