ndp: cope with unresolved neighbours
If we've not (yet) resolved a neighbour nda_lladdr will be NULL, and
NLA_DATA_LEN(neigh->nda_lladdr) will dereference a NULL pointer.
Avoid that by checking nda_lladdr first, and only dereferencing if it's
not NULL.
Test case:
ping6 -c 1 <non-existant neighbour>
ndp -a
Reviewed by: melifaro
MFC after: 3 days
Sponsored by: Rubicon Communications, LLC ("Netgate")
Differential Revision: https://reviews.freebsd.org/D41903
This commit is contained in:
@@ -230,9 +230,12 @@ print_entry(struct snl_parsed_neigh *neigh, struct snl_parsed_link_simple *link)
|
||||
.sdl_family = AF_LINK,
|
||||
.sdl_type = link->ifi_type,
|
||||
.sdl_len = sizeof(struct sockaddr_dl),
|
||||
.sdl_alen = NLA_DATA_LEN(neigh->nda_lladdr),
|
||||
};
|
||||
memcpy(sdl.sdl_data, NLA_DATA(neigh->nda_lladdr), sdl.sdl_alen);
|
||||
|
||||
if (neigh->nda_lladdr) {
|
||||
sdl.sdl_alen = NLA_DATA_LEN(neigh->nda_lladdr),
|
||||
memcpy(sdl.sdl_data, NLA_DATA(neigh->nda_lladdr), sdl.sdl_alen);
|
||||
}
|
||||
|
||||
addrwidth = strlen(host_buf);
|
||||
if (addrwidth < W_ADDR)
|
||||
|
||||
Reference in New Issue
Block a user