X-Git-Url: https://www.tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fnet_packet.c;h=64732d08684e52f24df7419337847ecaa1cbaae5;hp=df6f4826b64214558cd335ef1fc785f5f28e64d2;hb=74e50d52e0e23c9dd1e21fb447f1e1a59d02d0b2;hpb=0bfd69a2736cb98470b47c1f6cba617b58bb86ef diff --git a/src/net_packet.c b/src/net_packet.c index df6f4826..64732d08 100644 --- a/src/net_packet.c +++ b/src/net_packet.c @@ -533,15 +533,18 @@ void handle_incoming_vpn_data(int sock, short events, void *data) { sockaddr_t from; socklen_t fromlen = sizeof from; node_t *n; + int len; - pkt.len = recvfrom(sock, (char *) &pkt.seqno, MAXSIZE, 0, &from.sa, &fromlen); + len = recvfrom(sock, (char *) &pkt.seqno, MAXSIZE, 0, &from.sa, &fromlen); - if(pkt.len < 0) { + if(len <= 0 || len > MAXSIZE) { if(!sockwouldblock(sockerrno)) logger(LOG_ERR, "Receiving packet failed: %s", sockstrerror(sockerrno)); return; } + pkt.len = len; + sockaddrunmap(&from); /* Some braindead IPv6 implementations do stupid things. */ n = lookup_node_udp(&from);