git: a9326cd7656b - releng/14.0 - ndp: cope with unresolved neighbours
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 21 Sep 2023 12:00:29 UTC
The branch releng/14.0 has been updated by kp:
URL: https://cgit.FreeBSD.org/src/commit/?id=a9326cd7656bdb84b3bbdcf12ed0e66aee19b450
commit a9326cd7656bdb84b3bbdcf12ed0e66aee19b450
Author: Kristof Provost <kp@FreeBSD.org>
AuthorDate: 2023-09-18 17:01:17 +0000
Commit: Kristof Provost <kp@FreeBSD.org>
CommitDate: 2023-09-21 12:00:00 +0000
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
Approved by: re (kib)
Reviewed by: melifaro
MFC after: 3 days
Sponsored by: Rubicon Communications, LLC ("Netgate")
Differential Revision: https://reviews.freebsd.org/D41903
(cherry picked from commit b57df6fbcc484f1941bf306cb60a3adaf538df69)
(cherry picked from commit 100bed131d76893e9fc03f7a81dca3b83b030359)
---
usr.sbin/ndp/ndp_netlink.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/usr.sbin/ndp/ndp_netlink.c b/usr.sbin/ndp/ndp_netlink.c
index ace3e5e5fa11..954d16995b5a 100644
--- a/usr.sbin/ndp/ndp_netlink.c
+++ b/usr.sbin/ndp/ndp_netlink.c
@@ -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)