diff options
author | Ondrej Mosnacek <omosnace@redhat.com> | 2019-04-10 05:14:20 -0400 |
---|---|---|
committer | Paul Moore <paul@paul-moore.com> | 2019-04-15 18:14:01 -0400 |
commit | 7e8eda734d30de81d06a949c9bf9853c445ede4e (patch) | |
tree | d16d77f902e5e7bc24ce1afcb0589544d5e5e602 /kernel/auditsc.c | |
parent | 2d87a0674bd60d855e4008e2d84f5b23d7cb9b7d (diff) |
ntp: Audit NTP parameters adjustment
Emit an audit record every time selected NTP parameters are modified
from userspace (via adjtimex(2) or clock_adjtime(2)). These parameters
may be used to indirectly change system clock, and thus their
modifications should be audited.
Such events will now generate records of type AUDIT_TIME_ADJNTPVAL
containing the following fields:
- op -- which value was adjusted:
- offset -- corresponding to the time_offset variable
- freq -- corresponding to the time_freq variable
- status -- corresponding to the time_status variable
- adjust -- corresponding to the time_adjust variable
- tick -- corresponding to the tick_usec variable
- tai -- corresponding to the timekeeping's TAI offset
- old -- the old value
- new -- the new value
Example records:
type=TIME_ADJNTPVAL msg=audit(1530616044.507:7): op=status old=64 new=8256
type=TIME_ADJNTPVAL msg=audit(1530616044.511:11): op=freq old=0 new=49180377088000
The records of this type will be associated with the corresponding
syscall records.
An overview of parameter changes that can be done via do_adjtimex()
(based on information from Miroslav Lichvar) and whether they are
audited:
__timekeeping_set_tai_offset() -- sets the offset from the
International Atomic Time
(AUDITED)
NTP variables:
time_offset -- can adjust the clock by up to 0.5 seconds per call
and also speed it up or slow down by up to about
0.05% (43 seconds per day) (AUDITED)
time_freq -- can speed up or slow down by up to about 0.05%
(AUDITED)
time_status -- can insert/delete leap seconds and it also enables/
disables synchronization of the hardware real-time
clock (AUDITED)
time_maxerror, time_esterror -- change error estimates used to
inform userspace applications
(NOT AUDITED)
time_constant -- controls the speed of the clock adjustments that
are made when time_offset is set (NOT AUDITED)
time_adjust -- can temporarily speed up or slow down the clock by up
to 0.05% (AUDITED)
tick_usec -- a more extreme version of time_freq; can speed up or
slow down the clock by up to 10% (AUDITED)
Signed-off-by: Ondrej Mosnacek <omosnace@redhat.com>
Reviewed-by: Richard Guy Briggs <rgb@redhat.com>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Paul Moore <paul@paul-moore.com>
Diffstat (limited to 'kernel/auditsc.c')
-rw-r--r-- | kernel/auditsc.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/kernel/auditsc.c b/kernel/auditsc.c index 3843495d0083..5371b59bde36 100644 --- a/kernel/auditsc.c +++ b/kernel/auditsc.c | |||
@@ -2519,6 +2519,28 @@ void __audit_tk_injoffset(struct timespec64 offset) | |||
2519 | (long long)offset.tv_sec, offset.tv_nsec); | 2519 | (long long)offset.tv_sec, offset.tv_nsec); |
2520 | } | 2520 | } |
2521 | 2521 | ||
2522 | static void audit_log_ntp_val(const struct audit_ntp_data *ad, | ||
2523 | const char *op, enum audit_ntp_type type) | ||
2524 | { | ||
2525 | const struct audit_ntp_val *val = &ad->vals[type]; | ||
2526 | |||
2527 | if (val->newval == val->oldval) | ||
2528 | return; | ||
2529 | |||
2530 | audit_log(audit_context(), GFP_KERNEL, AUDIT_TIME_ADJNTPVAL, | ||
2531 | "op=%s old=%lli new=%lli", op, val->oldval, val->newval); | ||
2532 | } | ||
2533 | |||
2534 | void __audit_ntp_log(const struct audit_ntp_data *ad) | ||
2535 | { | ||
2536 | audit_log_ntp_val(ad, "offset", AUDIT_NTP_OFFSET); | ||
2537 | audit_log_ntp_val(ad, "freq", AUDIT_NTP_FREQ); | ||
2538 | audit_log_ntp_val(ad, "status", AUDIT_NTP_STATUS); | ||
2539 | audit_log_ntp_val(ad, "tai", AUDIT_NTP_TAI); | ||
2540 | audit_log_ntp_val(ad, "tick", AUDIT_NTP_TICK); | ||
2541 | audit_log_ntp_val(ad, "adjust", AUDIT_NTP_ADJUST); | ||
2542 | } | ||
2543 | |||
2522 | static void audit_log_task(struct audit_buffer *ab) | 2544 | static void audit_log_task(struct audit_buffer *ab) |
2523 | { | 2545 | { |
2524 | kuid_t auid, uid; | 2546 | kuid_t auid, uid; |