From: Franck Bui Date: Tue, 23 Aug 2022 15:07:23 +0000 (+0200) Subject: core: allow disabling system time correction if rtc returns time far in the future X-Git-Tag: v252-rc1~352 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2306b4656a822e83c2a2563131be8d676c8bfb71;p=thirdparty%2Fsystemd.git core: allow disabling system time correction if rtc returns time far in the future There might be (embedded) systems that get never updated (things like e.g. entertainment systems of trains, for example) and where the adjustment of the system clock (introduced by b10abe4bba61aebe4c667c412741193f11886298) would do the wrong thing even if the difference between the systemd build time and the rtc is 15 years or more. This patch allows disabling the adjustment by setting 'clock-valid-range-usec-max' meson option to 0 or to a negative value. --- diff --git a/meson_options.txt b/meson_options.txt index d5237f02ae3..814f3408409 100644 --- a/meson_options.txt +++ b/meson_options.txt @@ -223,7 +223,7 @@ option('status-unit-format-default', type : 'combo', option('time-epoch', type : 'integer', value : 0, description : 'time epoch for time clients') option('clock-valid-range-usec-max', type : 'integer', value : 473364000000000, # 15 years - description : 'maximum value in microseconds for the difference between RTC and epoch, exceeding which is considered an RTC error') + description : 'maximum value in microseconds for the difference between RTC and epoch, exceeding which is considered an RTC error ["0" disables]') option('default-user-shell', type : 'string', value : '/bin/bash', description : 'default interactive shell') diff --git a/src/shared/clock-util.c b/src/shared/clock-util.c index eb6f12a2556..a4c00d713e3 100644 --- a/src/shared/clock-util.c +++ b/src/shared/clock-util.c @@ -153,7 +153,7 @@ int clock_apply_epoch(ClockChangeDirection *ret_attempted_change) { now_usec = now(CLOCK_REALTIME); if (now_usec < epoch_usec) *ret_attempted_change = CLOCK_CHANGE_FORWARD; - else if (now_usec > usec_add(epoch_usec, CLOCK_VALID_RANGE_USEC_MAX)) + else if (CLOCK_VALID_RANGE_USEC_MAX > 0 && now_usec > usec_add(epoch_usec, CLOCK_VALID_RANGE_USEC_MAX)) *ret_attempted_change = CLOCK_CHANGE_BACKWARD; else { *ret_attempted_change = CLOCK_CHANGE_NOOP;