From 02a79c4a320bc93e10ff4db4f3a248f5103ddcab Mon Sep 17 00:00:00 2001 From: Zhenlei Huang Date: Fri, 7 Mar 2025 12:14:44 +0800 Subject: [PATCH] netlink: Fix getting route scope of interface's IPv4 addresses sin_addr of a `struct sockaddr_in` is stored in network byte order, but IN_LOOPBACK() and IN_LINKLOCAL() want the host order. Reviewed by: melifaro, #network Fixes: 7e5bf68495cc netlink: add netlink support MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D49226 (cherry picked from commit 0e096bb3fcaaf663df372aa4abb986e8d63c6e68) --- sys/netlink/route/iface.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/netlink/route/iface.c b/sys/netlink/route/iface.c index fe6d6bf18c9..d98385a4c23 100644 --- a/sys/netlink/route/iface.c +++ b/sys/netlink/route/iface.c @@ -816,9 +816,9 @@ ifa_get_scope(const struct ifaddr *ifa) { struct in_addr addr; addr = ((const struct sockaddr_in *)sa)->sin_addr; - if (IN_LOOPBACK(addr.s_addr)) + if (IN_LOOPBACK(ntohl(addr.s_addr))) addr_scope = RT_SCOPE_HOST; - else if (IN_LINKLOCAL(addr.s_addr)) + else if (IN_LINKLOCAL(ntohl(addr.s_addr))) addr_scope = RT_SCOPE_LINK; break; }