From 9deb315b6d5a12f7ba93dfa3c2c617d803f48a1c Mon Sep 17 00:00:00 2001 From: Oleg Hahm Date: Tue, 15 Sep 2015 12:37:35 +0200 Subject: [PATCH 1/2] sixlowpan nd: remove superfluous check in stale --- sys/net/gnrc/network_layer/ndp/gnrc_ndp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/net/gnrc/network_layer/ndp/gnrc_ndp.c b/sys/net/gnrc/network_layer/ndp/gnrc_ndp.c index ed68300248..03d5bc7e1e 100644 --- a/sys/net/gnrc/network_layer/ndp/gnrc_ndp.c +++ b/sys/net/gnrc/network_layer/ndp/gnrc_ndp.c @@ -57,7 +57,7 @@ static void _stale_nc(kernel_pid_t iface, ipv6_addr_t *ipaddr, uint8_t *l2addr, #ifdef MODULE_GNRC_SIXLOWPAN_ND_ROUTER /* tentative type see https://tools.ietf.org/html/rfc6775#section-6.3 */ gnrc_ipv6_netif_t *ipv6_iface = gnrc_ipv6_netif_get(iface); - if ((ipv6_iface == NULL) || (ipv6_iface->flags & GNRC_IPV6_NETIF_FLAGS_ROUTER)) { + if (ipv6_iface->flags & GNRC_IPV6_NETIF_FLAGS_ROUTER) { timex_t t = { GNRC_SIXLOWPAN_ND_TENTATIVE_NCE_LIFETIME, 0 }; gnrc_ipv6_nc_add(iface, ipaddr, l2addr, (uint16_t)l2addr_len, GNRC_IPV6_NC_STATE_STALE | GNRC_IPV6_NC_TYPE_TENTATIVE); From 46fcb4632c6a9c246085427d14abb346341f6023 Mon Sep 17 00:00:00 2001 From: Oleg Hahm Date: Mon, 14 Sep 2015 22:29:35 +0200 Subject: [PATCH 2/2] 6lowpan nd: fix null pointer handling in staling --- sys/net/gnrc/network_layer/ndp/gnrc_ndp.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/sys/net/gnrc/network_layer/ndp/gnrc_ndp.c b/sys/net/gnrc/network_layer/ndp/gnrc_ndp.c index 03d5bc7e1e..4136b39431 100644 --- a/sys/net/gnrc/network_layer/ndp/gnrc_ndp.c +++ b/sys/net/gnrc/network_layer/ndp/gnrc_ndp.c @@ -57,13 +57,17 @@ static void _stale_nc(kernel_pid_t iface, ipv6_addr_t *ipaddr, uint8_t *l2addr, #ifdef MODULE_GNRC_SIXLOWPAN_ND_ROUTER /* tentative type see https://tools.ietf.org/html/rfc6775#section-6.3 */ gnrc_ipv6_netif_t *ipv6_iface = gnrc_ipv6_netif_get(iface); - if (ipv6_iface->flags & GNRC_IPV6_NETIF_FLAGS_ROUTER) { + if ((ipv6_iface->flags & GNRC_IPV6_NETIF_FLAGS_SIXLOWPAN) && + (ipv6_iface->flags & GNRC_IPV6_NETIF_FLAGS_ROUTER)) { timex_t t = { GNRC_SIXLOWPAN_ND_TENTATIVE_NCE_LIFETIME, 0 }; - gnrc_ipv6_nc_add(iface, ipaddr, l2addr, (uint16_t)l2addr_len, - GNRC_IPV6_NC_STATE_STALE | GNRC_IPV6_NC_TYPE_TENTATIVE); - vtimer_remove(&nc_entry->type_timeout); - vtimer_set_msg(&nc_entry->type_timeout, t, gnrc_ipv6_pid, - GNRC_SIXLOWPAN_ND_MSG_AR_TIMEOUT, nc_entry); + if ((nc_entry = gnrc_ipv6_nc_add(iface, ipaddr, l2addr, + (uint16_t)l2addr_len, + GNRC_IPV6_NC_STATE_STALE | + GNRC_IPV6_NC_TYPE_TENTATIVE)) != NULL) { + vtimer_remove(&nc_entry->type_timeout); + vtimer_set_msg(&nc_entry->type_timeout, t, gnrc_ipv6_pid, + GNRC_SIXLOWPAN_ND_MSG_AR_TIMEOUT, nc_entry); + } return; } #endif