The branch main has been updated by markj:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=2589ec0f365777faacf36bd1eb24706538836b17

commit 2589ec0f365777faacf36bd1eb24706538836b17
Author:     Mark Johnston <[email protected]>
AuthorDate: 2023-02-03 15:57:37 +0000
Commit:     Mark Johnston <[email protected]>
CommitDate: 2023-02-03 16:48:25 +0000

    pcb: Move an assignment into in_pcbdisconnect()
    
    All callers of in_pcbdisconnect() clear the local address, so let's just
    do that in the function itself.
    
    Note that the inp's local address is not a parameter to the inp hash
    functions.  No functional change intended.
    
    Reviewed by:    glebius
    MFC after:      2 weeks
    Sponsored by:   Klara, Inc.
    Sponsored by:   Modirum MDPay
    Differential Revision:  https://reviews.freebsd.org/D38362
---
 sys/netinet/in_pcb.c       | 1 +
 sys/netinet/udp_usrreq.c   | 3 ---
 sys/netinet6/in6_pcb.c     | 3 ++-
 sys/netinet6/udp6_usrreq.c | 3 ---
 4 files changed, 3 insertions(+), 7 deletions(-)

diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c
index ce8a58883be4..954fe5482076 100644
--- a/sys/netinet/in_pcb.c
+++ b/sys/netinet/in_pcb.c
@@ -1460,6 +1460,7 @@ in_pcbdisconnect(struct inpcb *inp)
        INP_WLOCK_ASSERT(inp);
        INP_HASH_WLOCK_ASSERT(inp->inp_pcbinfo);
 
+       inp->inp_laddr.s_addr = INADDR_ANY;
        inp->inp_faddr.s_addr = INADDR_ANY;
        inp->inp_fport = 0;
        in_pcbrehash(inp);
diff --git a/sys/netinet/udp_usrreq.c b/sys/netinet/udp_usrreq.c
index 19c163e95094..4efeb6a0e8e7 100644
--- a/sys/netinet/udp_usrreq.c
+++ b/sys/netinet/udp_usrreq.c
@@ -1457,7 +1457,6 @@ udp_abort(struct socket *so)
        if (inp->inp_faddr.s_addr != INADDR_ANY) {
                INP_HASH_WLOCK(pcbinfo);
                in_pcbdisconnect(inp);
-               inp->inp_laddr.s_addr = INADDR_ANY;
                INP_HASH_WUNLOCK(pcbinfo);
                soisdisconnected(so);
        }
@@ -1567,7 +1566,6 @@ udp_close(struct socket *so)
        if (inp->inp_faddr.s_addr != INADDR_ANY) {
                INP_HASH_WLOCK(pcbinfo);
                in_pcbdisconnect(inp);
-               inp->inp_laddr.s_addr = INADDR_ANY;
                INP_HASH_WUNLOCK(pcbinfo);
                soisdisconnected(so);
        }
@@ -1644,7 +1642,6 @@ udp_disconnect(struct socket *so)
        }
        INP_HASH_WLOCK(pcbinfo);
        in_pcbdisconnect(inp);
-       inp->inp_laddr.s_addr = INADDR_ANY;
        INP_HASH_WUNLOCK(pcbinfo);
        SOCK_LOCK(so);
        so->so_state &= ~SS_ISCONNECTED;                /* XXX */
diff --git a/sys/netinet6/in6_pcb.c b/sys/netinet6/in6_pcb.c
index 0a4ae51cb5ef..51d29399e99b 100644
--- a/sys/netinet6/in6_pcb.c
+++ b/sys/netinet6/in6_pcb.c
@@ -511,7 +511,8 @@ in6_pcbdisconnect(struct inpcb *inp)
        INP_WLOCK_ASSERT(inp);
        INP_HASH_WLOCK_ASSERT(inp->inp_pcbinfo);
 
-       bzero((caddr_t)&inp->in6p_faddr, sizeof(inp->in6p_faddr));
+       memset(&inp->in6p_laddr, 0, sizeof(inp->in6p_laddr));
+       memset(&inp->in6p_faddr, 0, sizeof(inp->in6p_faddr));
        inp->inp_fport = 0;
        /* clear flowinfo - draft-itojun-ipv6-flowlabel-api-00 */
        inp->inp_flow &= ~IPV6_FLOWLABEL_MASK;
diff --git a/sys/netinet6/udp6_usrreq.c b/sys/netinet6/udp6_usrreq.c
index 92cd4ab9cd39..b79a00280110 100644
--- a/sys/netinet6/udp6_usrreq.c
+++ b/sys/netinet6/udp6_usrreq.c
@@ -976,7 +976,6 @@ udp6_abort(struct socket *so)
        if (!IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_faddr)) {
                INP_HASH_WLOCK(pcbinfo);
                in6_pcbdisconnect(inp);
-               inp->in6p_laddr = in6addr_any;
                INP_HASH_WUNLOCK(pcbinfo);
                soisdisconnected(so);
        }
@@ -1093,7 +1092,6 @@ udp6_close(struct socket *so)
        if (!IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_faddr)) {
                INP_HASH_WLOCK(pcbinfo);
                in6_pcbdisconnect(inp);
-               inp->in6p_laddr = in6addr_any;
                INP_HASH_WUNLOCK(pcbinfo);
                soisdisconnected(so);
        }
@@ -1240,7 +1238,6 @@ udp6_disconnect(struct socket *so)
 
        INP_HASH_WLOCK(pcbinfo);
        in6_pcbdisconnect(inp);
-       inp->in6p_laddr = in6addr_any;
        INP_HASH_WUNLOCK(pcbinfo);
        SOCK_LOCK(so);
        so->so_state &= ~SS_ISCONNECTED;                /* XXX */

Reply via email to