Message ID | 20170119142311.8310-1-bobby.prani@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Le 19/01/2017 à 15:23, Pranith Kumar a écrit : > From: Marc-André Lureau <marcandre.lureau@redhat.com> > > old_value is the 4th argument of timer_settime(), not the 2nd. > > Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> > Signed-off-by: Pranith Kumar <bobby.prani@gmail.com> > --- > linux-user/syscall.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > index 7b77503f94..a393764a17 100644 > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -12024,10 +12024,14 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, > timer_t htimer = g_posix_timers[timerid]; > struct itimerspec hspec_new = {{0},}, hspec_old = {{0},}; > > - target_to_host_itimerspec(&hspec_new, arg3); > + if (arg3 && target_to_host_itimerspec(&hspec_new, arg3)) { arg3 cannot be NULL, see 8 lines above, you need to only check the result of target_to_host_itimerspec(). Thanks, Laurent
On Thu, Jan 19, 2017 at 10:05 AM, Laurent Vivier <laurent@vivier.eu> wrote: > Le 19/01/2017 à 15:23, Pranith Kumar a écrit : >> From: Marc-André Lureau <marcandre.lureau@redhat.com> >> >> old_value is the 4th argument of timer_settime(), not the 2nd. >> >> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> >> Signed-off-by: Pranith Kumar <bobby.prani@gmail.com> >> --- >> linux-user/syscall.c | 8 ++++++-- >> 1 file changed, 6 insertions(+), 2 deletions(-) >> >> diff --git a/linux-user/syscall.c b/linux-user/syscall.c >> index 7b77503f94..a393764a17 100644 >> --- a/linux-user/syscall.c >> +++ b/linux-user/syscall.c >> @@ -12024,10 +12024,14 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, >> timer_t htimer = g_posix_timers[timerid]; >> struct itimerspec hspec_new = {{0},}, hspec_old = {{0},}; >> >> - target_to_host_itimerspec(&hspec_new, arg3); >> + if (arg3 && target_to_host_itimerspec(&hspec_new, arg3)) { > > arg3 cannot be NULL, see 8 lines above, you need to only check the > result of target_to_host_itimerspec(). > OK, I updated this and sent a new patch. Thanks for the review.
diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 7b77503f94..a393764a17 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -12024,10 +12024,14 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, timer_t htimer = g_posix_timers[timerid]; struct itimerspec hspec_new = {{0},}, hspec_old = {{0},}; - target_to_host_itimerspec(&hspec_new, arg3); + if (arg3 && target_to_host_itimerspec(&hspec_new, arg3)) { + goto efault; + } ret = get_errno( timer_settime(htimer, arg2, &hspec_new, &hspec_old)); - host_to_target_itimerspec(arg2, &hspec_old); + if (arg4 && host_to_target_itimerspec(arg4, &hspec_old)) { + goto efault; + } } break; }