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)).
This commit is contained in:
Miroslav Lichvar 2018-02-23 14:17:07 +01:00
parent 2c7ab98370
commit 666ece122e

View file

@ -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. */ The test values are 1 when passed and 0 when failed. */
/* Test 1 checks for duplicate packet */ /* 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 /* 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. */ ensures the source is responding to the latest packet we sent to it. */