diff options
Diffstat (limited to 'kernel/time/ntp.c')
| -rw-r--r-- | kernel/time/ntp.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c index 92a90014a925..ac5555e25733 100644 --- a/kernel/time/ntp.c +++ b/kernel/time/ntp.c | |||
| @@ -17,6 +17,7 @@ | |||
| 17 | #include <linux/mm.h> | 17 | #include <linux/mm.h> |
| 18 | #include <linux/module.h> | 18 | #include <linux/module.h> |
| 19 | #include <linux/rtc.h> | 19 | #include <linux/rtc.h> |
| 20 | #include <linux/audit.h> | ||
| 20 | 21 | ||
| 21 | #include "ntp_internal.h" | 22 | #include "ntp_internal.h" |
| 22 | #include "timekeeping_internal.h" | 23 | #include "timekeeping_internal.h" |
| @@ -709,7 +710,7 @@ static inline void process_adjtimex_modes(const struct __kernel_timex *txc, | |||
| 709 | * kernel time-keeping variables. used by xntpd. | 710 | * kernel time-keeping variables. used by xntpd. |
| 710 | */ | 711 | */ |
| 711 | int __do_adjtimex(struct __kernel_timex *txc, const struct timespec64 *ts, | 712 | int __do_adjtimex(struct __kernel_timex *txc, const struct timespec64 *ts, |
| 712 | s32 *time_tai) | 713 | s32 *time_tai, struct audit_ntp_data *ad) |
| 713 | { | 714 | { |
| 714 | int result; | 715 | int result; |
| 715 | 716 | ||
| @@ -720,14 +721,29 @@ int __do_adjtimex(struct __kernel_timex *txc, const struct timespec64 *ts, | |||
| 720 | /* adjtime() is independent from ntp_adjtime() */ | 721 | /* adjtime() is independent from ntp_adjtime() */ |
| 721 | time_adjust = txc->offset; | 722 | time_adjust = txc->offset; |
| 722 | ntp_update_frequency(); | 723 | ntp_update_frequency(); |
| 724 | |||
| 725 | audit_ntp_set_old(ad, AUDIT_NTP_ADJUST, save_adjust); | ||
| 726 | audit_ntp_set_new(ad, AUDIT_NTP_ADJUST, time_adjust); | ||
| 723 | } | 727 | } |
| 724 | txc->offset = save_adjust; | 728 | txc->offset = save_adjust; |
| 725 | } else { | 729 | } else { |
| 726 | |||
| 727 | /* If there are input parameters, then process them: */ | 730 | /* If there are input parameters, then process them: */ |
| 728 | if (txc->modes) | 731 | if (txc->modes) { |
| 732 | audit_ntp_set_old(ad, AUDIT_NTP_OFFSET, time_offset); | ||
| 733 | audit_ntp_set_old(ad, AUDIT_NTP_FREQ, time_freq); | ||
| 734 | audit_ntp_set_old(ad, AUDIT_NTP_STATUS, time_status); | ||
| 735 | audit_ntp_set_old(ad, AUDIT_NTP_TAI, *time_tai); | ||
| 736 | audit_ntp_set_old(ad, AUDIT_NTP_TICK, tick_usec); | ||
| 737 | |||
| 729 | process_adjtimex_modes(txc, time_tai); | 738 | process_adjtimex_modes(txc, time_tai); |
| 730 | 739 | ||
| 740 | audit_ntp_set_new(ad, AUDIT_NTP_OFFSET, time_offset); | ||
| 741 | audit_ntp_set_new(ad, AUDIT_NTP_FREQ, time_freq); | ||
| 742 | audit_ntp_set_new(ad, AUDIT_NTP_STATUS, time_status); | ||
| 743 | audit_ntp_set_new(ad, AUDIT_NTP_TAI, *time_tai); | ||
| 744 | audit_ntp_set_new(ad, AUDIT_NTP_TICK, tick_usec); | ||
| 745 | } | ||
| 746 | |||
| 731 | txc->offset = shift_right(time_offset * NTP_INTERVAL_FREQ, | 747 | txc->offset = shift_right(time_offset * NTP_INTERVAL_FREQ, |
| 732 | NTP_SCALE_SHIFT); | 748 | NTP_SCALE_SHIFT); |
| 733 | if (!(time_status & STA_NANO)) | 749 | if (!(time_status & STA_NANO)) |
