ntp: check if packet was received by right socket
This commit is contained in:
parent
9a657cd4a3
commit
f2c4ab09a8
3 changed files with 12 additions and 2 deletions
|
@ -1275,6 +1275,7 @@ NCR_ProcessKnown
|
|||
struct timeval *now, /* timestamp at time of receipt */
|
||||
double now_err,
|
||||
NCR_Instance inst, /* the instance record for this peer/server */
|
||||
int sock_fd, /* the receiving socket */
|
||||
int length /* the length of the received packet */
|
||||
)
|
||||
{
|
||||
|
@ -1282,6 +1283,14 @@ NCR_ProcessKnown
|
|||
int version;
|
||||
int auth_len;
|
||||
|
||||
/* Make sure the packet was received by the sending socket */
|
||||
if (sock_fd != inst->local_addr.sock_fd) {
|
||||
DEBUG_LOG(LOGF_NtpCore,
|
||||
"Packet received by wrong socket %d (expected %d)",
|
||||
sock_fd, inst->local_addr.sock_fd);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Ignore packets from offline sources */
|
||||
if (inst->opmode == MD_OFFLINE) {
|
||||
return;
|
||||
|
|
|
@ -54,7 +54,7 @@ extern void NCR_DestroyInstance(NCR_Instance instance);
|
|||
|
||||
/* This routine is called when a new packet arrives off the network,
|
||||
and it relates to a source we have an ongoing protocol exchange with */
|
||||
extern void NCR_ProcessKnown(NTP_Packet *message, struct timeval *now, double now_err, NCR_Instance data, int length);
|
||||
extern void NCR_ProcessKnown(NTP_Packet *message, struct timeval *now, double now_err, NCR_Instance data, int sock_fd, int length);
|
||||
|
||||
/* This routine is called when a new packet arrives off the network,
|
||||
and we do not recognize its source */
|
||||
|
|
|
@ -356,7 +356,8 @@ NSR_ProcessReceive(NTP_Packet *message, struct timeval *now, double now_err, NTP
|
|||
|
||||
find_slot(remote_addr, &slot, &found);
|
||||
if (found == 2) { /* Must match IP address AND port number */
|
||||
NCR_ProcessKnown(message, now, now_err, records[slot].data, length);
|
||||
NCR_ProcessKnown(message, now, now_err, records[slot].data,
|
||||
local_addr->sock_fd, length);
|
||||
} else {
|
||||
NCR_ProcessUnknown(message, now, now_err, remote_addr, local_addr, length);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue