diff --git a/src/core/ipv6/nd6.c b/src/core/ipv6/nd6.c index ec29a9bb..ff26d095 100644 --- a/src/core/ipv6/nd6.c +++ b/src/core/ipv6/nd6.c @@ -447,7 +447,12 @@ nd6_input(struct pbuf *p, struct netif *inp) buffer = &((u8_t*)p->payload)[offset]; } else { buffer = nd6_ra_buffer; - pbuf_copy_partial(p, buffer, sizeof(struct prefix_option), offset); + if (pbuf_copy_partial(p, buffer, sizeof(struct prefix_option), offset) != sizeof(struct prefix_option)) { + pbuf_free(p); + ND6_STATS_INC(nd6.lenerr); + ND6_STATS_INC(nd6.drop); + return; + } } if (buffer[1] == 0) { /* zero-length extension. drop packet */