| From 5e5aeb4367b450a28f447f6d5ab57d8f2ab16a5f Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sasha.levin@oracle.com> |
| Date: Wed, 3 Dec 2014 19:25:05 -0500 |
| Subject: time: adjtimex: Validate the ADJ_FREQUENCY values |
| |
| From: Sasha Levin <sasha.levin@oracle.com> |
| |
| commit 5e5aeb4367b450a28f447f6d5ab57d8f2ab16a5f upstream. |
| |
| Verify that the frequency value from userspace is valid and makes sense. |
| |
| Unverified values can cause overflows later on. |
| |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: Ingo Molnar <mingo@kernel.org> |
| Signed-off-by: Sasha Levin <sasha.levin@oracle.com> |
| [jstultz: Fix up bug for negative values and drop redunent cap check] |
| Signed-off-by: John Stultz <john.stultz@linaro.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| kernel/time/ntp.c | 7 +++++++ |
| 1 file changed, 7 insertions(+) |
| |
| --- a/kernel/time/ntp.c |
| +++ b/kernel/time/ntp.c |
| @@ -631,6 +631,13 @@ int ntp_validate_timex(struct timex *txc |
| if ((txc->modes & ADJ_SETOFFSET) && (!capable(CAP_SYS_TIME))) |
| return -EPERM; |
| |
| + if (txc->modes & ADJ_FREQUENCY) { |
| + if (LONG_MIN / PPM_SCALE > txc->freq) |
| + return -EINVAL; |
| + if (LONG_MAX / PPM_SCALE < txc->freq) |
| + return -EINVAL; |
| + } |
| + |
| return 0; |
| } |
| |