From: Miroslav Lichvar Date: Tue, 22 Aug 2017 11:29:48 +0000 (+0200) Subject: hwclock: check if estimated frequency is sane X-Git-Tag: 3.2-pre2~11 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=36291b707bd3ac1d208699a1ad241cc5f4ce98cb;p=thirdparty%2Fchrony.git hwclock: check if estimated frequency is sane --- diff --git a/hwclock.c b/hwclock.c index a6427c3f..7f2bf043 100644 --- a/hwclock.c +++ b/hwclock.c @@ -39,6 +39,9 @@ /* Maximum number of samples per clock */ #define MAX_SAMPLES 16 +/* Maximum acceptable frequency offset of the clock */ +#define MAX_FREQ_OFFSET (2.0 / 3.0) + struct HCL_Instance_Record { /* HW and local reference timestamp */ struct timespec hw_ref; @@ -175,8 +178,9 @@ HCL_AccumulateSample(HCL_Instance clock, struct timespec *hw_ts, clock->n_samples -= best_start; /* If the fit doesn't cross the error interval of the last sample, - throw away all samples and start again */ - if (fabs(clock->offset) > err) { + or the frequency is not sane, drop all samples and start again */ + if (fabs(clock->offset) > err || + fabs(clock->frequency - 1.0) > MAX_FREQ_OFFSET) { DEBUG_LOG("HW clock reset"); clock->n_samples = 0; clock->valid_coefs = 0;