From 36291b707bd3ac1d208699a1ad241cc5f4ce98cb Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Tue, 22 Aug 2017 13:29:48 +0200 Subject: [PATCH] hwclock: check if estimated frequency is sane --- hwclock.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/hwclock.c b/hwclock.c index a6427c3..7f2bf04 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;