From b1dd2818fe812a8182df4b448e39bcf11b4d9b93 Mon Sep 17 00:00:00 2001 From: Yonezawa-T2 Date: Mon, 22 Feb 2016 20:36:14 +0900 Subject: [PATCH] udp: discard UDP packets with zero checksum. RFC 2460 Section 8.1 > IPv6 receivers must discard UDP packets containing a zero checksum, > and should log the error. --- sys/net/gnrc/transport_layer/udp/gnrc_udp.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/sys/net/gnrc/transport_layer/udp/gnrc_udp.c b/sys/net/gnrc/transport_layer/udp/gnrc_udp.c index 89fbaa14f6..bd7ca8bd3b 100644 --- a/sys/net/gnrc/transport_layer/udp/gnrc_udp.c +++ b/sys/net/gnrc/transport_layer/udp/gnrc_udp.c @@ -137,6 +137,15 @@ static void _receive(gnrc_pktsnip_t *pkt) hdr = (udp_hdr_t *)udp->data; /* validate checksum */ + if (byteorder_ntohs(hdr->checksum) == 0) { + /* RFC 2460 Section 8.1 + * "IPv6 receivers must discard UDP packets containing a zero checksum, + * and should log the error." + */ + DEBUG("udp: received packet with zero checksum, dropping it\n"); + gnrc_pktbuf_release(pkt); + return; + } if (_calc_csum(udp, ipv6, pkt) != 0xFFFF) { DEBUG("udp: received packet with invalid checksum, dropping it\n"); gnrc_pktbuf_release(pkt);