diff options
| -rw-r--r-- | kernel/time/ntp.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c index 36f2ca09aa5e..6df8927c58a5 100644 --- a/kernel/time/ntp.c +++ b/kernel/time/ntp.c | |||
| @@ -685,8 +685,18 @@ int ntp_validate_timex(struct timex *txc) | |||
| 685 | if (!capable(CAP_SYS_TIME)) | 685 | if (!capable(CAP_SYS_TIME)) |
| 686 | return -EPERM; | 686 | return -EPERM; |
| 687 | 687 | ||
| 688 | if (!timeval_inject_offset_valid(&txc->time)) | 688 | if (txc->modes & ADJ_NANO) { |
| 689 | return -EINVAL; | 689 | struct timespec ts; |
| 690 | |||
| 691 | ts.tv_sec = txc->time.tv_sec; | ||
| 692 | ts.tv_nsec = txc->time.tv_usec; | ||
| 693 | if (!timespec_inject_offset_valid(&ts)) | ||
| 694 | return -EINVAL; | ||
| 695 | |||
| 696 | } else { | ||
| 697 | if (!timeval_inject_offset_valid(&txc->time)) | ||
| 698 | return -EINVAL; | ||
| 699 | } | ||
| 690 | } | 700 | } |
| 691 | 701 | ||
| 692 | /* | 702 | /* |
