git: f818559774cb - main - netlink: fix adding an interface route
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 28 Nov 2023 21:13:36 UTC
The branch main has been updated by rcm:
URL: https://cgit.FreeBSD.org/src/commit/?id=f818559774cb0c1516364c4beca361480fd68b5b
commit f818559774cb0c1516364c4beca361480fd68b5b
Author: KUROSAWA Takahiro <takahiro.kurosawa@gmail.com>
AuthorDate: 2023-11-28 18:14:50 +0000
Commit: R. Christian McDonald <rcm@FreeBSD.org>
CommitDate: 2023-11-28 21:11:55 +0000
netlink: fix adding an interface route
route add <host> -iface <netif>" for a netif without an IPv4/IPv6
address fails with EINVAL. Need to use a link-level ifaddr for gw if
an ifaddr for dst is not found as the rtsock-based implementation does.
PR: 275341
Reported by: Sean Cody <sean@tinfoilhat.ca>
Reviewed by: rcm
Tested by: rcm
Approved by: kp (mentor)
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D41330
---
sys/netlink/route/rt.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/sys/netlink/route/rt.c b/sys/netlink/route/rt.c
index cfaa2167b0d2..ed09748995dc 100644
--- a/sys/netlink/route/rt.c
+++ b/sys/netlink/route/rt.c
@@ -750,9 +750,14 @@ finalize_nhop(struct nhop_object *nh, const struct sockaddr *dst, int *perror)
struct ifaddr *ifa = ifaof_ifpforaddr(gw_sa, nh->nh_ifp);
if (ifa == NULL) {
- NL_LOG(LOG_DEBUG, "Unable to determine ifa, skipping");
- *perror = EINVAL;
- return (NULL);
+ /* Try link-level ifa. */
+ gw_sa = &nh->gw_sa;
+ ifa = ifaof_ifpforaddr(gw_sa, nh->nh_ifp);
+ if (ifa == NULL) {
+ NL_LOG(LOG_DEBUG, "Unable to determine ifa, skipping");
+ *perror = EINVAL;
+ return (NULL);
+ }
}
nhop_set_src(nh, ifa);
}