Hi On Fri, Jan 22, 2016 at 12:03 AM, John Stultz <john.stu...@linaro.org> wrote: > Recently, in commit 37cf4dc3370f > ("time: Verify time values in adjtimex ADJ_SETOFFSET to avoid overflow") > I forgot to check if the timeval being passed was actually a > timespec (as is signaled with ADJ_NANO). > > This resulted in that patch breaking ADJ_SETOFFSET users who set > ADJ_NANO, by rejecting valid timespecs that were compared with > valid timeval ranges. > > This patch addresses this by checking for the ADJ_NANO flag and > using the timepsec check instead in that case. > > Cc: Sasha Levin <sasha.le...@oracle.com> > Cc: Richard Cochran <richardcoch...@gmail.com> > Cc: Thomas Gleixner <t...@linutronix.de> > Cc: Prarit Bhargava <pra...@redhat.com> > Cc: Harald Hoyer <har...@redhat.com> > Cc: Kay Sievers <k...@vrfy.org> > Cc: David Herrmann <dh.herrm...@gmail.com> > Reported-by: Harald Hoyer <har...@redhat.com> > Reported-by: Kay Sievers <k...@vrfy.org> > Signed-off-by: John Stultz <john.stu...@linaro.org>
Thanks for picking this up. Looks good to me: Reviewed-by: David Herrmann <dh.herrm...@gmail.com> Thanks David > --- > kernel/time/ntp.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > > diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c > index 36f2ca0..6df8927 100644 > --- a/kernel/time/ntp.c > +++ b/kernel/time/ntp.c > @@ -685,8 +685,18 @@ int ntp_validate_timex(struct timex *txc) > if (!capable(CAP_SYS_TIME)) > return -EPERM; > > - if (!timeval_inject_offset_valid(&txc->time)) > - return -EINVAL; > + if (txc->modes & ADJ_NANO) { > + struct timespec ts; > + > + ts.tv_sec = txc->time.tv_sec; > + ts.tv_nsec = txc->time.tv_usec; > + if (!timespec_inject_offset_valid(&ts)) > + return -EINVAL; > + > + } else { > + if (!timeval_inject_offset_valid(&txc->time)) > + return -EINVAL; > + } > } > > /* > -- > 1.9.1 >