X-Git-Url: http://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fnet_packet.c;h=c3e8c6246206ed5226eef5dd0de2d8ba3e68944d;hb=9d48d5b7d48ad23e23eae02feae69bdc5ae80c8e;hp=076b37f48728702d089b7ca6dccf0fe640bc83e6;hpb=9a366544c297d5c558800f9ffc301e2cb5a6a672;p=tinc diff --git a/src/net_packet.c b/src/net_packet.c index 076b37f4..c3e8c624 100644 --- a/src/net_packet.c +++ b/src/net_packet.c @@ -372,7 +372,11 @@ static bool receive_udppacket(node_t *n, vpn_packet_t *inpkt) { } return false; } - return sptps_receive_data(&n->sptps, (char *)&inpkt->seqno, inpkt->len); + if(!sptps_receive_data(&n->sptps, (char *)&inpkt->seqno, inpkt->len)) { + logger(DEBUG_TRAFFIC, LOG_ERR, "Got bad packet from %s (%s)", n->name, n->hostname); + return false; + } + return true; } if(!n->status.validkey) { @@ -759,7 +763,7 @@ end: origpkt->len = origlen; } -static bool send_sptps_data_priv(node_t *to, node_t *from, int type, const char *data, size_t len) { +static bool send_sptps_data_priv(node_t *to, node_t *from, int type, const void *data, size_t len) { node_t *relay = (to->via != myself && (type == PKT_PROBE || (len - SPTPS_DATAGRAM_OVERHEAD) <= to->via->minmtu)) ? to->via : to->nexthop; bool direct = from == myself && to == relay; bool relay_supported = (relay->options >> 24) >= 4; @@ -792,7 +796,7 @@ static bool send_sptps_data_priv(node_t *to, node_t *from, int type, const char if(relay_supported) { if(direct) { /* Inform the recipient that this packet was sent directly. */ - node_id_t nullid = {0}; + node_id_t nullid = {}; memcpy(buf_ptr, &nullid, sizeof nullid); buf_ptr += sizeof nullid; } else { memcpy(buf_ptr, &to->id, sizeof to->id); buf_ptr += sizeof to->id; @@ -1050,7 +1054,7 @@ void handle_incoming_vpn_data(void *data, int flags) { if(len >= sizeof pkt.dstid + sizeof pkt.srcid) { n = lookup_node_id(&pkt.srcid); if(n) { - node_id_t nullid = {0}; + node_id_t nullid = {}; if(memcmp(&pkt.dstid, &nullid, sizeof nullid) == 0) { /* A zero dstid is used to indicate a direct, non-relayed packet. */ direct = true;