nd6: Update RA link-local addr option length check

lwIP might support different hardware address lengths (when using
Ethernet and 6LoWPAN for instance). Match provided lladdr length
from Router Advertisement to the current network interface instead
of comparing against longest that can be stored.
This commit is contained in:
Erik Ekman
2023-09-28 22:06:27 +02:00
parent 4f78da983f
commit 7807f706f3
3 changed files with 9 additions and 2 deletions

View File

@@ -687,11 +687,12 @@ nd6_input(struct pbuf *p, struct netif *inp)
case ND6_OPTION_TYPE_SOURCE_LLADDR:
{
struct lladdr_option *lladdr_opt;
if (option_len < sizeof(struct lladdr_option)) {
if (option_len < ND6_LLADDR_OPTION_MIN_LENGTH) {
goto lenerr_drop_free_return;
}
lladdr_opt = (struct lladdr_option *)buffer;
if ((default_router_list[i].neighbor_entry != NULL) &&
if ((lladdr_opt->length == inp->hwaddr_len) &&
(default_router_list[i].neighbor_entry != NULL) &&
(default_router_list[i].neighbor_entry->state == ND6_INCOMPLETE)) {
SMEMCPY(default_router_list[i].neighbor_entry->lladdr, lladdr_opt->addr, inp->hwaddr_len);
default_router_list[i].neighbor_entry->state = ND6_REACHABLE;