From 7d9ef9f78cc2b680224fd15a5e57f3778aa91c4e Mon Sep 17 00:00:00 2001 From: Martine Lenders Date: Wed, 23 Jan 2019 18:09:55 +0100 Subject: [PATCH] gnrc_sixlowpan_frag/rbuf: add offset assertion to rbuf_add() `gnrc_sixlowpan_frag` internally derives the offset value directly from the fragment header, so for normal usage within GNRC this assertion is redundant, but to make the tests of `rbuf_add` 100% water-tide I added it. --- sys/net/gnrc/network_layer/sixlowpan/frag/rbuf.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sys/net/gnrc/network_layer/sixlowpan/frag/rbuf.c b/sys/net/gnrc/network_layer/sixlowpan/frag/rbuf.c index 1203fc12b7..fc2d16bacc 100644 --- a/sys/net/gnrc/network_layer/sixlowpan/frag/rbuf.c +++ b/sys/net/gnrc/network_layer/sixlowpan/frag/rbuf.c @@ -87,11 +87,16 @@ static int _rbuf_add(gnrc_netif_hdr_t *netif_hdr, gnrc_pktsnip_t *pkt, size_t offset, unsigned page) { rbuf_t *entry; - sixlowpan_frag_t *frag = pkt->data; + sixlowpan_frag_n_t *frag = pkt->data; rbuf_int_t *ptr; uint8_t *data = ((uint8_t *)pkt->data) + sizeof(sixlowpan_frag_t); size_t frag_size; + /* check if provided offset is the same as in fragment */ + assert(((((frag->disp_size.u8[0] & SIXLOWPAN_FRAG_DISP_MASK) == + SIXLOWPAN_FRAG_1_DISP)) && (offset == 0)) || + ((((frag->disp_size.u8[0] & SIXLOWPAN_FRAG_DISP_MASK) == + SIXLOWPAN_FRAG_N_DISP)) && (offset == (frag->offset * 8U)))); rbuf_gc(); entry = _rbuf_get(gnrc_netif_hdr_get_src_addr(netif_hdr), netif_hdr->src_l2addr_len, gnrc_netif_hdr_get_dst_addr(netif_hdr), netif_hdr->dst_l2addr_len,