1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2025-01-18 12:52:44 +01:00

gnrc_rpl: fix zeroing of RPL DIS fields

The code originally assumed that the location of DIS struct is directly
after the ICMPv6 struct. This is not necessarily true when both structs
are individually allocated by pktbuf. This commit fixes this issue by
directly accessing the location of the DIS struct.
This commit is contained in:
Koen Zandberg 2018-08-29 00:27:09 +02:00
parent 11f1955ad4
commit 0c790c6638
No known key found for this signature in database
GPG Key ID: 0895A893E6D2985B

View File

@ -314,7 +314,6 @@ void gnrc_rpl_send_DIS(gnrc_rpl_instance_t *inst, ipv6_addr_t *destination,
gnrc_rpl_internal_opt_t **options, size_t num_opts)
{
gnrc_pktsnip_t *pkt = NULL, *tmp;
icmpv6_hdr_t *icmp;
gnrc_rpl_dis_t *dis;
/* No options provided to be attached to the DIS, so we PadN 2 bytes */
@ -358,6 +357,9 @@ void gnrc_rpl_send_DIS(gnrc_rpl_instance_t *inst, ipv6_addr_t *destination,
return;
}
pkt = tmp;
dis = (gnrc_rpl_dis_t *)pkt->data;
dis->flags = 0;
dis->reserved = 0;
if ((tmp = gnrc_icmpv6_build(pkt, ICMPV6_RPL_CTRL, GNRC_RPL_ICMPV6_CODE_DIS,
sizeof(icmpv6_hdr_t))) == NULL) {
@ -366,12 +368,6 @@ void gnrc_rpl_send_DIS(gnrc_rpl_instance_t *inst, ipv6_addr_t *destination,
return;
}
pkt = tmp;
icmp = (icmpv6_hdr_t *)pkt->data;
dis = (gnrc_rpl_dis_t *)(icmp + 1);
dis->flags = 0;
dis->reserved = 0;
#ifdef MODULE_NETSTATS_RPL
gnrc_rpl_netstats_tx_DIS(&gnrc_rpl_netstats, gnrc_pkt_len(pkt),
(destination && !ipv6_addr_is_multicast(destination)));