aboutsummaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorGleb Smirnoff <glebius@FreeBSD.org>2026-04-12 18:34:57 +0000
committerGleb Smirnoff <glebius@FreeBSD.org>2026-04-12 18:34:57 +0000
commitedece33b38ebcba46bd4d81382ebdb5a634a0c6d (patch)
tree7e8b5a27bad3eb40e64961a008d437708f777744 /sys
parent1d0ea3dfb9cbc26e77491bacef1cbc5d72e0375d (diff)
Diffstat (limited to 'sys')
-rw-r--r--sys/netinet/in_pcb.c1
-rw-r--r--sys/netinet/udp_usrreq.c3
-rw-r--r--sys/netinet6/in6_pcb.c1
-rw-r--r--sys/netinet6/udp6_usrreq.c3
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);