linux-uconsole/kernel/time
John Stultz 72e2d60926 ntp: Fixup adjtimex freq validation on 32-bit systems
commit 29183a70b0 upstream.

Additional validation of adjtimex freq values to avoid
potential multiplication overflows were added in commit
5e5aeb4367 (time: adjtimex: Validate the ADJ_FREQUENCY values)

Unfortunately the patch used LONG_MAX/MIN instead of
LLONG_MAX/MIN, which was fine on 64-bit systems, but being
much smaller on 32-bit systems caused false positives
resulting in most direct frequency adjustments to fail w/
EINVAL.

ntpd only does direct frequency adjustments at startup, so
the issue was not as easily observed there, but other time
sync applications like ptpd and chrony were more effected by
the bug.

See bugs:

  https://bugzilla.kernel.org/show_bug.cgi?id=92481
  https://bugzilla.redhat.com/show_bug.cgi?id=1188074

This patch changes the checks to use LLONG_MAX for
clarity, and additionally the checks are disabled
on 32-bit systems since LLONG_MAX/PPM_SCALE is always
larger then the 32-bit long freq value, so multiplication
overflows aren't possible there.

Reported-by: Josh Boyer <jwboyer@fedoraproject.org>
Reported-by: George Joseph <george.joseph@fairview5.com>
Tested-by: George Joseph <george.joseph@fairview5.com>
Signed-off-by: John Stultz <john.stultz@linaro.org>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Sasha Levin <sasha.levin@oracle.com>
Link: http://lkml.kernel.org/r/1423553436-29747-1-git-send-email-john.stultz@linaro.org
[ Prettified the changelog and the comments a bit. ]
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-03-06 14:40:52 -08:00
..
alarmtimer.c alarmtimer: Lock k_itimer during timer callback 2014-10-05 14:54:14 -07:00
clockevents.c timer: Fix lock inversion between hrtimer_bases.lock and scheduler locks 2014-08-07 14:30:26 -07:00
clocksource.c kernel-time: fix s/then/than/ spelling errors 2012-03-23 16:49:21 -07:00
jiffies.c time: Fix overflow when HZ is smaller than 60 2014-02-22 12:41:29 -08:00
Kconfig Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip 2013-05-15 14:05:17 -07:00
Makefile time: remove the timecompare code. 2012-11-01 11:41:35 -04:00
ntp.c ntp: Fixup adjtimex freq validation on 32-bit systems 2015-03-06 14:40:52 -08:00
ntp_internal.h ntp: Rework do_adjtimex to take timespec and tai arguments 2013-04-04 13:18:15 -07:00
posix-clock.c kernel: Fix files explicitly needing EXPORT_SYMBOL infrastructure 2011-10-31 19:30:05 -04:00
tick-broadcast.c tick: Make oneshot broadcast robust vs. CPU offlining 2014-03-23 21:38:21 -07:00
tick-common.c clockevents: Prefer CPU local devices over global devices 2013-12-08 07:29:27 -08:00
tick-internal.h clockevents: Get rid of the notifier chain 2013-12-08 07:29:27 -08:00
tick-oneshot.c clockevents: Make minimum delay adjustments configurable 2011-09-08 11:10:56 +02:00
tick-sched.c nohz: Fix another inconsistency between CONFIG_NO_HZ=n and nohz=off 2014-06-26 15:12:41 -04:00
timeconv.c time: add function to convert between calendar time and broken-down time for universal use 2009-09-24 07:20:56 -07:00
timekeeping.c timekeeping: Avoid possible deadlock from clock_was_set_delayed 2014-02-13 13:48:04 -08:00
timer_list.c timer_list: correct the iterator for timer_list 2013-09-07 22:09:58 -07:00
timer_stats.c locking, timer_stats: Annotate table_lock as raw 2011-09-13 11:12:00 +02:00