From 28ef3b6b0b7a3e51126fc96418ff2e1783fed066 Mon Sep 17 00:00:00 2001 From: "Martine S. Lenders" Date: Fri, 17 Jan 2020 18:50:39 +0100 Subject: [PATCH] gnrc_ipv6_ext_frag: remove fragment header when n-th fragment is first The reassembly buffer only needs (and stores) the headers *before* the fragment header (called per-fragment headers in RFC 8200, section 4.5). Currently, when a subsequent IPv6 fragment is received before the first fragment the fragment header is however not removed. With this fix it does. --- .../gnrc/network_layer/ipv6/ext/frag/gnrc_ipv6_ext_frag.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sys/net/gnrc/network_layer/ipv6/ext/frag/gnrc_ipv6_ext_frag.c b/sys/net/gnrc/network_layer/ipv6/ext/frag/gnrc_ipv6_ext_frag.c index d694dae67cc8..e7025a4efff5 100644 --- a/sys/net/gnrc/network_layer/ipv6/ext/frag/gnrc_ipv6_ext_frag.c +++ b/sys/net/gnrc/network_layer/ipv6/ext/frag/gnrc_ipv6_ext_frag.c @@ -476,8 +476,10 @@ gnrc_pktsnip_t *gnrc_ipv6_ext_frag_reass(gnrc_pktsnip_t *pkt) memcpy(((uint8_t *)rbuf->pkt->data) + offset, pkt->data, pkt->size); /* if entry was newly created above */ if (rbuf->pkt->next == fh_snip->next) { - /* we don't need the payload anymore, headers are still kept to be - * reused when assembled, so just remove the payload. */ + /* we don't need the payload and fragment header anymore, the + * remaining headers are still kept to be reused when assembled, so + * just remove the payload. */ + gnrc_pktbuf_remove_snip(pkt, fh_snip); gnrc_pktbuf_remove_snip(pkt, pkt); } else {