Index | Thread | Search

From:
Vitaliy Makkoveev <otto@bsdbox.dev>
Subject:
Re: check INP_IPV6 in callee
To:
Alexander Bluhm <alexander.bluhm@gmx.net>
Cc:
OpenBSD Tech <tech@openbsd.org>
Date:
Thu, 18 Jan 2024 19:53:20 +0300

Download raw body.

Thread
> On 18 Jan 2024, at 18:35, Alexander Bluhm <alexander.bluhm@gmx.net> wrote:
> 
> On Fri, Jan 12, 2024 at 12:22:51AM +0100, Alexander Bluhm wrote:
>> A bunch of IPv4 funtions call their IPv6 counterpart if INP_IPV6
>> is set for the socket.  I would like to use that consistently as
>> the code in the caller gets simpler.  I think the result is more
>> readable and consistent.
>> 
>> ok?
> 
> anyone?
> 

ok mvs

>> Index: netinet/in_pcb.c
>> ===================================================================
>> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/in_pcb.c,v
>> diff -u -p -r1.284 in_pcb.c
>> --- netinet/in_pcb.c	9 Jan 2024 19:57:00 -0000	1.284
>> +++ netinet/in_pcb.c	11 Jan 2024 12:43:58 -0000
>> @@ -517,7 +517,7 @@ in_pcbconnect(struct inpcb *inp, struct
>> #ifdef INET6
>> 	if (ISSET(inp->inp_flags, INP_IPV6))
>> 		return (in6_pcbconnect(inp, nam));
>> -#endif /* INET6 */
>> +#endif
>> 
>> 	if ((error = in_nam2sin(nam, &sin)))
>> 		return (error);
>> @@ -652,6 +652,13 @@ in_setsockaddr(struct inpcb *inp, struct
>> {
>> 	struct sockaddr_in *sin;
>> 
>> +#ifdef INET6
>> +	if (ISSET(inp->inp_flags, INP_IPV6)) {
>> +		in6_setsockaddr(inp, nam);
>> +		return;
>> +	}
>> +#endif
>> +
>> 	nam->m_len = sizeof(*sin);
>> 	sin = mtod(nam, struct sockaddr_in *);
>> 	memset(sin, 0, sizeof(*sin));
>> @@ -671,7 +678,7 @@ in_setpeeraddr(struct inpcb *inp, struct
>> 		in6_setpeeraddr(inp, nam);
>> 		return;
>> 	}
>> -#endif /* INET6 */
>> +#endif
>> 
>> 	nam->m_len = sizeof(*sin);
>> 	sin = mtod(nam, struct sockaddr_in *);
>> Index: netinet/tcp_usrreq.c
>> ===================================================================
>> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/tcp_usrreq.c,v
>> diff -u -p -r1.227 tcp_usrreq.c
>> --- netinet/tcp_usrreq.c	3 Dec 2023 20:24:17 -0000	1.227
>> +++ netinet/tcp_usrreq.c	11 Jan 2024 12:36:37 -0000
>> @@ -502,7 +502,7 @@ tcp_detach(struct socket *so)
>> {
>> 	struct inpcb *inp;
>> 	struct tcpcb *otp = NULL, *tp;
>> -	int error = 0;
>> +	int error;
>> 	short ostate;
>> 
>> 	soassertlocked(so);
>> @@ -526,7 +526,7 @@ tcp_detach(struct socket *so)
>> 
>> 	if (otp)
>> 		tcp_trace(TA_USER, ostate, tp, otp, NULL, PRU_DETACH, 0);
>> -	return (error);
>> +	return (0);
>> }
>> 
>> /*
>> @@ -685,26 +685,17 @@ tcp_accept(struct socket *so, struct mbu
>> 	struct inpcb *inp;
>> 	struct tcpcb *tp;
>> 	int error;
>> -	short ostate;
>> 
>> 	soassertlocked(so);
>> 
>> 	if ((error = tcp_sogetpcb(so, &inp, &tp)))
>> 		return (error);
>> 
>> -	if (so->so_options & SO_DEBUG)
>> -		ostate = tp->t_state;
>> -
>> -#ifdef INET6
>> -	if (inp->inp_flags & INP_IPV6)
>> -		in6_setpeeraddr(inp, nam);
>> -	else
>> -#endif
>> -		in_setpeeraddr(inp, nam);
>> +	in_setpeeraddr(inp, nam);
>> 
>> 	if (so->so_options & SO_DEBUG)
>> -		tcp_trace(TA_USER, ostate, tp, tp, NULL, PRU_ACCEPT, 0);
>> -	return (error);
>> +		tcp_trace(TA_USER, tp->t_state, tp, tp, NULL, PRU_ACCEPT, 0);
>> +	return (0);
>> }
>> 
>> /*
>> @@ -994,12 +985,7 @@ tcp_sockaddr(struct socket *so, struct m
>> 	if ((error = tcp_sogetpcb(so, &inp, &tp)))
>> 		return (error);
>> 
>> -#ifdef INET6
>> -	if (inp->inp_flags & INP_IPV6)
>> -		in6_setsockaddr(inp, nam);
>> -	else
>> -#endif
>> -		in_setsockaddr(inp, nam);
>> +	in_setsockaddr(inp, nam);
>> 
>> 	if (so->so_options & SO_DEBUG)
>> 		tcp_trace(TA_USER, tp->t_state, tp, tp, NULL,
>> @@ -1019,16 +1005,10 @@ tcp_peeraddr(struct socket *so, struct m
>> 	if ((error = tcp_sogetpcb(so, &inp, &tp)))
>> 		return (error);
>> 
>> -#ifdef INET6
>> -	if (inp->inp_flags & INP_IPV6)
>> -		in6_setpeeraddr(inp, nam);
>> -	else
>> -#endif
>> -		in_setpeeraddr(inp, nam);
>> +	in_setpeeraddr(inp, nam);
>> 
>> 	if (so->so_options & SO_DEBUG)
>> -		tcp_trace(TA_USER, tp->t_state, tp, tp, NULL,
>> -		    PRU_PEERADDR, 0);
>> +		tcp_trace(TA_USER, tp->t_state, tp, tp, NULL, PRU_PEERADDR, 0);
>> 	return (0);
>> }
>> 
>> Index: netinet/udp_usrreq.c
>> ===================================================================
>> RCS file: /data/mirror/openbsd/cvs/src/sys/netinet/udp_usrreq.c,v
>> diff -u -p -r1.313 udp_usrreq.c
>> --- netinet/udp_usrreq.c	10 Jan 2024 16:44:30 -0000	1.313
>> +++ netinet/udp_usrreq.c	11 Jan 2024 12:23:30 -0000
>> @@ -936,9 +936,9 @@ udp_output(struct inpcb *inp, struct mbu
>> 	struct in_addr laddr;
>> 	int error = 0;
>> 
>> -#ifdef DIAGNOSTIC
>> -	if ((inp->inp_flags & INP_IPV6) != 0)
>> -		panic("IPv6 inpcb to %s", __func__);
>> +#ifdef INET6
>> +	if (ISSET(inp->inp_flags, INP_IPV6))
>> +		return (udp6_output(inp, m, addr, control));
>> #endif
>> 
>> 	/*
>> @@ -1230,7 +1230,6 @@ udp_send(struct socket *so, struct mbuf
>>     struct mbuf *control)
>> {
>> 	struct inpcb *inp = sotoinpcb(so);
>> -	int error;
>> 
>> 	soassertlocked(so);
>> 
>> @@ -1265,14 +1264,7 @@ udp_send(struct socket *so, struct mbuf
>> 	}
>> #endif
>> 
>> -#ifdef INET6
>> -	if (inp->inp_flags & INP_IPV6)
>> -		error = udp6_output(inp, m, addr, control);
>> -	else
>> -#endif
>> -		error = udp_output(inp, m, addr, control);
>> -
>> -	return (error);
>> +	return (udp_output(inp, m, addr, control));
>> }
>> 
>> /*
>