git: 7a4a122f9731 - stable/14 - netlink: fix adding an interface route
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 14 Mar 2024 08:29:42 UTC
The branch stable/14 has been updated by zlei: URL: https://cgit.FreeBSD.org/src/commit/?id=7a4a122f9731c589831e1c00d85588ff9813b338 commit 7a4a122f9731c589831e1c00d85588ff9813b338 Author: KUROSAWA Takahiro <takahiro.kurosawa@gmail.com> AuthorDate: 2023-11-28 18:14:50 +0000 Commit: Zhenlei Huang <zlei@FreeBSD.org> CommitDate: 2024-03-14 08:27:42 +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 (cherry picked from commit f818559774cb0c1516364c4beca361480fd68b5b) --- 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); }