On Sat, Nov 30, 2019 at 01:42:38PM +0100, Jeremie Courreges-Anglas wrote: > > Similar to the recent "dhcpcd: if_learnaddrs: if_addrflags6: Invalid > argument" thread[0]. At least ports/net/openvpn is affected, as > reported by Landry*. kdump looks like: > > 88944 openvpn CALL ioctl(4,SIOCGIFNETMASK,0x7f7ffffe8bc0) > 88944 openvpn RET ioctl -1 errno 22 Invalid argument > > I think at least IPv4 get ioctls should not require sa_len to be set. > The same solution was already used for sys/netinet6/in6.c; I added the > extra "sa" variable to mimic the IPv6 code. > > ok?
OK bluhm@ > * the warning in logs looks like "openvpn[94060]: GDG: ioctl #1 failed", > Landry's setup may have been negatively affected, mine was not. > > [0] https://marc.info/?l=openbsd-bugs&m=157399829431423&w=2 > > > Index: netinet/in.c > =================================================================== > RCS file: /d/cvs/src/sys/netinet/in.c,v > retrieving revision 1.167 > diff -u -p -r1.167 in.c > --- netinet/in.c 28 Nov 2019 00:50:41 -0000 1.167 > +++ netinet/in.c 30 Nov 2019 12:24:17 -0000 > @@ -557,11 +557,14 @@ in_ioctl_get(u_long cmd, caddr_t data, s > struct ifreq *ifr = (struct ifreq *)data; > struct ifaddr *ifa; > struct in_ifaddr *ia = NULL; > + struct sockaddr *sa; > struct sockaddr_in *sin = NULL; > int error = 0; > > - if (ifr->ifr_addr.sa_family == AF_INET) { > - error = in_sa2sin(&ifr->ifr_addr, &sin); > + sa = &ifr->ifr_addr; > + if (sa->sa_family == AF_INET) { > + sa->sa_len = sizeof(struct sockaddr_in); > + error = in_sa2sin(sa, &sin); > if (error) > return (error); > } > > > -- > jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF DDCC 0DFA 74AE 1524 E7EE
