On Sun, Feb 02, 2014 at 03:04:52AM +0000, edgar.igles...@gmail.com wrote: > From: Stefan Weil <s...@weilnetz.de> > > __put_user can write bytes, words (2 bytes) or longwords (4 bytes). > Here obviously words should have been written, but bytes were written, > so values like 0x9c5f were truncated to 0x5f. > > Fix this by changing retcode from uint8_t to to uint16_t in > target_signal_frame and also in the unused rt_signal_frame. > > This problem was reported by static code analysis (smatch).
Acked-by: Riku Voipio <riku.voi...@linaro.org> > Cc: qemu-sta...@nongnu.org > Signed-off-by: Stefan Weil <s...@weilnetz.de> > Reviewed-by: Peter Maydell <peter.mayd...@linaro.org> > Tested-by: Edgar E. Iglesias <edgar.igles...@xilinx.com> > Reviewed-by: Edgar E. Iglesias <edgar.igles...@xilinx.com> > Signed-off-by: Edgar E. Iglesias <edgar.igles...@xilinx.com> > --- > linux-user/signal.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/linux-user/signal.c b/linux-user/signal.c > index 01d7c39..82e8592 100644 > --- a/linux-user/signal.c > +++ b/linux-user/signal.c > @@ -3659,7 +3659,7 @@ struct target_sigcontext { > struct target_signal_frame { > struct target_sigcontext sc; > uint32_t extramask[TARGET_NSIG_WORDS - 1]; > - uint8_t retcode[8]; /* Trampoline code. */ > + uint16_t retcode[4]; /* Trampoline code. */ > }; > > struct rt_signal_frame { > @@ -3667,7 +3667,7 @@ struct rt_signal_frame { > void *puc; > siginfo_t info; > struct ucontext uc; > - uint8_t retcode[8]; /* Trampoline code. */ > + uint16_t retcode[4]; /* Trampoline code. */ > }; > > static void setup_sigcontext(struct target_sigcontext *sc, CPUCRISState *env) > @@ -3745,8 +3745,8 @@ static void setup_frame(int sig, struct > target_sigaction *ka, > */ > err |= __put_user(0x9c5f, frame->retcode+0); > err |= __put_user(TARGET_NR_sigreturn, > - frame->retcode+2); > - err |= __put_user(0xe93d, frame->retcode+4); > + frame->retcode + 1); > + err |= __put_user(0xe93d, frame->retcode + 2); > > /* Save the mask. */ > err |= __put_user(set->sig[0], &frame->sc.oldmask); > -- > 1.8.3.2 >