X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Froute.c;h=c04b0ad757ebc46d34698e3d8a8e0b6853050f5a;hp=77bec047b4738f0c2c6a18789aebe3546714735c;hb=b45511118421920771f5dcd5e4bafc04376e4450;hpb=95928f7c2910a7da01a89cdc63c86c4d87fac004 diff --git a/src/route.c b/src/route.c index 77bec047..c04b0ad7 100644 --- a/src/route.c +++ b/src/route.c @@ -94,7 +94,7 @@ static bool checklength(node_t *source, vpn_packet_t *packet, length_t length) { } static void clamp_mss(const node_t *source, const node_t *via, vpn_packet_t *packet) { - if(!via || via == myself) + if(!via || via == myself || !(via->options & OPTION_CLAMP_MSS)) return; /* Find TCP header */ @@ -112,6 +112,9 @@ static void clamp_mss(const node_t *source, const node_t *via, vpn_packet_t *pac /* Use data offset field to calculate length of options field */ int len = ((packet->data[start + 12] >> 4) - 5) * 4; + if(packet->len < start + 20 + len) + return; + /* Search for MSS option header */ for(int i = 0; i < len;) { if(packet->data[start + 20 + i] == 0)