Don't try to send MTU probes to unreachable nodes.
If there is an outstanding MTU probe event for a node which is not reachable anymore, a UDP packet would be sent to that node, which caused a key request to be sent to that node, which triggered a NULL pointer dereference. Probes and other UDP packets to unreachable nodes are now dropped.
This commit is contained in:
parent
261d1eac1c
commit
36f8e4da8b
2 changed files with 15 additions and 0 deletions
|
@ -41,6 +41,11 @@ bool send_meta(connection_t *c, const char *buffer, int length)
|
||||||
|
|
||||||
cp();
|
cp();
|
||||||
|
|
||||||
|
if(!c) {
|
||||||
|
logger(LOG_ERR, _("send_meta() called with NULL pointer!"));
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
ifdebug(META) logger(LOG_DEBUG, _("Sending %d bytes of metadata to %s (%s)"), length,
|
ifdebug(META) logger(LOG_DEBUG, _("Sending %d bytes of metadata to %s (%s)"), length,
|
||||||
c->name, c->hostname);
|
c->name, c->hostname);
|
||||||
|
|
||||||
|
|
|
@ -70,6 +70,11 @@ void send_mtu_probe(node_t *n)
|
||||||
n->mtuprobes++;
|
n->mtuprobes++;
|
||||||
n->mtuevent = NULL;
|
n->mtuevent = NULL;
|
||||||
|
|
||||||
|
if(!n->status.reachable) {
|
||||||
|
ifdebug(TRAFFIC) logger(LOG_INFO, _("Trying to send MTU probe to unreachable node %s (%s)"), n->name, n->hostname);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if(n->mtuprobes >= 10 && !n->minmtu) {
|
if(n->mtuprobes >= 10 && !n->minmtu) {
|
||||||
ifdebug(TRAFFIC) logger(LOG_INFO, _("No response to MTU probes from %s (%s)"), n->name, n->hostname);
|
ifdebug(TRAFFIC) logger(LOG_INFO, _("No response to MTU probes from %s (%s)"), n->name, n->hostname);
|
||||||
return;
|
return;
|
||||||
|
@ -328,6 +333,11 @@ static void send_udppacket(node_t *n, vpn_packet_t *origpkt)
|
||||||
|
|
||||||
cp();
|
cp();
|
||||||
|
|
||||||
|
if(!n->status.reachable) {
|
||||||
|
ifdebug(TRAFFIC) logger(LOG_INFO, _("Trying to send UDP packet to unreachable node %s (%s)"), n->name, n->hostname);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
/* Make sure we have a valid key */
|
/* Make sure we have a valid key */
|
||||||
|
|
||||||
if(!n->status.validkey) {
|
if(!n->status.validkey) {
|
||||||
|
|
Loading…
Reference in a new issue