From 0e096bb3fcaaf663df372aa4abb986e8d63c6e68 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 --- 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 93465e55e6a..8b871576d0b 100644 --- a/sys/netlink/route/iface.c +++ b/sys/netlink/route/iface.c @@ -818,9 +818,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; }