mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
Discard any messages which are buffered on the routing socket before using
it otherwise the response to one of our routing messages could be lost due to buffer overflow.
This commit is contained in:
parent
3f4fff96f9
commit
7cb18415b8
1 changed files with 15 additions and 2 deletions
|
|
@ -39,7 +39,7 @@
|
|||
|
||||
/*
|
||||
* from arp.c 8.2 (Berkeley) 1/2/94
|
||||
* $Id: rtmsg.c,v 1.1.1.1 1994/09/30 05:45:06 pst Exp $
|
||||
* $Id: rtmsg.c,v 1.2 1995/01/16 18:57:45 dfr Exp $
|
||||
*/
|
||||
|
||||
#include <sys/param.h>
|
||||
|
|
@ -50,6 +50,7 @@
|
|||
#if BSD >= 199306
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <sys/filio.h>
|
||||
|
||||
#include <net/if.h>
|
||||
#include <net/if_dl.h>
|
||||
|
|
@ -85,6 +86,18 @@ static void getsocket () {
|
|||
report(LOG_ERR, "socket %s", strerror(errno));
|
||||
exit(1);
|
||||
}
|
||||
} else {
|
||||
/*
|
||||
* Drain the socket of any unwanted routing messages.
|
||||
*/
|
||||
int n;
|
||||
char buf[512];
|
||||
|
||||
ioctl(s, FIONREAD, &n);
|
||||
while (n > 0) {
|
||||
read(s, buf, sizeof buf);
|
||||
ioctl(s, FIONREAD, &n);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -228,7 +241,7 @@ static int rtmsg(cmd)
|
|||
}
|
||||
do {
|
||||
l = read(s, (char *)&m_rtmsg, sizeof(m_rtmsg));
|
||||
} while (l > 0 && (rtm->rtm_seq != seq || rtm->rtm_pid != getpid()));
|
||||
} while (l > 0 && (rtm->rtm_type != cmd || rtm->rtm_seq != seq || rtm->rtm_pid != getpid()));
|
||||
if (l < 0)
|
||||
report(LOG_WARNING, "arp: read from routing socket: %s\n",
|
||||
strerror(errno));
|
||||
|
|
|
|||
Loading…
Reference in a new issue