From: Miroslav Lichvar Date: Fri, 23 Feb 2018 13:17:07 +0000 (+0100) Subject: ntp: compare receive timestamp when checking for duplicate X-Git-Tag: 3.3-pre1~35 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=666ece122e5c4b75ebc570ae45bccabe8a1c1d0b;p=thirdparty%2Fchrony.git ntp: compare receive timestamp when checking for duplicate Compare both receive and transmit timestamps in the NTP test number 1. This prevents a client from dropping a valid response in the interleaved mode if it follows a response in the basic mode and the server did not have a kernel/hardware transmit timestamp, and the random bits of the two timestamps happen to be the same (chance of 1 in 2^(32-precision)). --- diff --git a/ntp_core.c b/ntp_core.c index 6d5b8576..0b4ce90f 100644 --- a/ntp_core.c +++ b/ntp_core.c @@ -1495,7 +1495,8 @@ receive_packet(NCR_Instance inst, NTP_Local_Address *local_addr, The test values are 1 when passed and 0 when failed. */ /* Test 1 checks for duplicate packet */ - test1 = !!UTI_CompareNtp64(&message->transmit_ts, &inst->remote_ntp_tx); + test1 = UTI_CompareNtp64(&message->receive_ts, &inst->remote_ntp_rx) || + UTI_CompareNtp64(&message->transmit_ts, &inst->remote_ntp_tx); /* Test 2 checks for bogus packet in the basic and interleaved modes. This ensures the source is responding to the latest packet we sent to it. */