diff options
| author | Gleb Smirnoff <glebius@FreeBSD.org> | 2026-04-12 18:34:57 +0000 |
|---|---|---|
| committer | Gleb Smirnoff <glebius@FreeBSD.org> | 2026-04-12 18:34:57 +0000 |
| commit | edece33b38ebcba46bd4d81382ebdb5a634a0c6d (patch) | |
| tree | 7e8b5a27bad3eb40e64961a008d437708f777744 /sys | |
| parent | 1d0ea3dfb9cbc26e77491bacef1cbc5d72e0375d (diff) | |
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/netinet/in_pcb.c | 1 | ||||
| -rw-r--r-- | sys/netinet/udp_usrreq.c | 3 | ||||
| -rw-r--r-- | sys/netinet6/in6_pcb.c | 1 | ||||
| -rw-r--r-- | sys/netinet6/udp6_usrreq.c | 3 |
4 files changed, 6 insertions, 2 deletions
diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c index 29214fbd2cf6..7b294e0a92d5 100644 --- a/sys/netinet/in_pcb.c +++ b/sys/netinet/in_pcb.c @@ -1465,7 +1465,6 @@ in_pcbdisconnect(struct inpcb *inp) if ((inp->inp_socket->so_proto->pr_flags & PR_CONNREQUIRED) == 0) { /* See the comment in in_pcbinshash(). */ inp->inp_smr = smr_advance(inp->inp_pcbinfo->ipi_smr); - inp->inp_laddr.s_addr = INADDR_ANY; inp->inp_faddr.s_addr = INADDR_ANY; inp->inp_fport = 0; } diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c index b973b299ca56..23b0ca684b09 100644 --- a/sys/netinet/udp_usrreq.c +++ b/sys/netinet/udp_usrreq.c @@ -1528,6 +1528,7 @@ udp_abort(struct socket *so) INP_WLOCK(inp); if (inp->inp_faddr.s_addr != INADDR_ANY) { in_pcbdisconnect(inp); + inp->inp_laddr.s_addr = INADDR_ANY; soisdisconnected(so); } INP_WUNLOCK(inp); @@ -1630,6 +1631,7 @@ udp_close(struct socket *so) INP_WLOCK(inp); if (inp->inp_faddr.s_addr != INADDR_ANY) { in_pcbdisconnect(inp); + inp->inp_laddr.s_addr = INADDR_ANY; soisdisconnected(so); } INP_WUNLOCK(inp); @@ -1697,6 +1699,7 @@ udp_disconnect(struct socket *so) return (ENOTCONN); } in_pcbdisconnect(inp); + inp->inp_laddr.s_addr = INADDR_ANY; SOCK_LOCK(so); so->so_state &= ~SS_ISCONNECTED; /* XXX */ SOCK_UNLOCK(so); diff --git a/sys/netinet6/in6_pcb.c b/sys/netinet6/in6_pcb.c index 136f5c8a9828..ad596cf761d2 100644 --- a/sys/netinet6/in6_pcb.c +++ b/sys/netinet6/in6_pcb.c @@ -542,7 +542,6 @@ in6_pcbdisconnect(struct inpcb *inp) /* See the comment in in_pcbinshash(). */ inp->inp_smr = smr_advance(inp->inp_pcbinfo->ipi_smr); /* XXX-MJ torn writes are visible to SMR lookup */ - memset(&inp->in6p_laddr, 0, sizeof(inp->in6p_laddr)); memset(&inp->in6p_faddr, 0, sizeof(inp->in6p_faddr)); inp->inp_fport = 0; } diff --git a/sys/netinet6/udp6_usrreq.c b/sys/netinet6/udp6_usrreq.c index 3f4c3111fa5b..ede791a7d175 100644 --- a/sys/netinet6/udp6_usrreq.c +++ b/sys/netinet6/udp6_usrreq.c @@ -996,6 +996,7 @@ udp6_abort(struct socket *so) if (!IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_faddr)) { in6_pcbdisconnect(inp); + memset(&inp->in6p_laddr, 0, sizeof(inp->in6p_laddr)); soisdisconnected(so); } INP_WUNLOCK(inp); @@ -1105,6 +1106,7 @@ udp6_close(struct socket *so) #endif if (!IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_faddr)) { in6_pcbdisconnect(inp); + memset(&inp->in6p_laddr, 0, sizeof(inp->in6p_laddr)); soisdisconnected(so); } INP_WUNLOCK(inp); @@ -1239,6 +1241,7 @@ udp6_disconnect(struct socket *so) } in6_pcbdisconnect(inp); + memset(&inp->in6p_laddr, 0, sizeof(inp->in6p_laddr)); SOCK_LOCK(so); so->so_state &= ~SS_ISCONNECTED; /* XXX */ SOCK_UNLOCK(so); |
