From 666ece122e5c4b75ebc570ae45bccabe8a1c1d0b Mon Sep 17 00:00:00 2001 From: Miroslav Lichvar Date: Fri, 23 Feb 2018 14:17:07 +0100 Subject: [PATCH] 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)). --- ntp_core.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ntp_core.c b/ntp_core.c index 6d5b857..0b4ce90 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. */