Index | Thread | Search

From:
Ido <ido@wireplug.org>
Subject:
Re: ia_sockmask.sin_family is not set correctly
To:
Claudio Jeker <cjeker@diehard.n-r-g.com>
Cc:
tech@openbsd.org
Date:
Mon, 22 Jun 2026 13:21:08 -0400

Download raw body.

Thread
On 2026-06-22, Ido wrote:
> However, I suspect it might actually be sufficient to set it only in the two
> 	if (ai == NULL) {
> 	}
> blocks, in in_ioctl_set_ifaddr() and in_ioctl_change_ifaddr() where we allocate
> a new in_ifaddr. I'll follow up with an alternative diff that does just that.

diff --git sys/netinet/in.c sys/netinet/in.c
index 4edd8573071..77e7db0f68e 100644
--- sys/netinet/in.c
+++ sys/netinet/in.c
@@ -390,6 +390,7 @@ in_ioctl_set_ifaddr(u_long cmd, caddr_t data, struct ifnet *ifp)
 		ia->ia_ifa.ifa_addr = sintosa(&ia->ia_addr);
 		ia->ia_ifa.ifa_dstaddr = sintosa(&ia->ia_dstaddr);
 		ia->ia_ifa.ifa_netmask = sintosa(&ia->ia_sockmask);
+		ia->ia_sockmask.sin_family = AF_INET;
 		ia->ia_sockmask.sin_len = 8;
 		if (ifp->if_flags & IFF_BROADCAST) {
 			ia->ia_broadaddr.sin_len = sizeof(ia->ia_addr);
@@ -484,6 +485,7 @@ in_ioctl_change_ifaddr(u_long cmd, caddr_t data, struct ifnet *ifp)
 			ia->ia_ifa.ifa_addr = sintosa(&ia->ia_addr);
 			ia->ia_ifa.ifa_dstaddr = sintosa(&ia->ia_dstaddr);
 			ia->ia_ifa.ifa_netmask = sintosa(&ia->ia_sockmask);
+			ia->ia_sockmask.sin_family = AF_INET;
 			ia->ia_sockmask.sin_len = 8;
 			if (ifp->if_flags & IFF_BROADCAST) {
 				ia->ia_broadaddr.sin_len = sizeof(ia->ia_addr);