From owner-dev-commits-src-all@freebsd.org Mon Jun 21 14:22:07 2021 Return-Path: Delivered-To: dev-commits-src-all@mailman.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mailman.nyi.freebsd.org (Postfix) with ESMTP id 5029064994E; Mon, 21 Jun 2021 14:22:07 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4G7sDH1gMHz3jt2; Mon, 21 Jun 2021 14:22:07 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 1FBB21ECD2; Mon, 21 Jun 2021 14:22:07 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 15LEM6RX058088; Mon, 21 Jun 2021 14:22:06 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 15LEM6HZ058087; Mon, 21 Jun 2021 14:22:06 GMT (envelope-from git) Date: Mon, 21 Jun 2021 14:22:06 GMT Message-Id: <202106211422.15LEM6HZ058087@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Mark Johnston Subject: git: 46d8116cae68 - stable/13 - Consistently use the SOLISTENING() macro MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 46d8116cae6845be70230640f16568576269b177 Auto-Submitted: auto-generated X-BeenThere: dev-commits-src-all@freebsd.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Commit messages for all branches of the src repository List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 21 Jun 2021 14:22:07 -0000 The branch stable/13 has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=46d8116cae6845be70230640f16568576269b177 commit 46d8116cae6845be70230640f16568576269b177 Author: Mark Johnston AuthorDate: 2021-06-14 21:32:27 +0000 Commit: Mark Johnston CommitDate: 2021-06-21 13:14:40 +0000 Consistently use the SOLISTENING() macro Some code was using it already, but in many places we were testing SO_ACCEPTCONN directly. As a small step towards fixing some bugs involving synchronization with listen(2), make the kernel consistently use SOLISTENING(). No functional change intended. Sponsored by: The FreeBSD Foundation (cherry picked from commit f4bb1869ddd2bca89b6b6bfaf4d866efdd9243cf) --- sys/dev/hyperv/hvsock/hv_sock.c | 2 +- sys/kern/uipc_accf.c | 7 +++---- sys/kern/uipc_socket.c | 8 ++++---- sys/kern/uipc_syscalls.c | 2 +- sys/kern/uipc_usrreq.c | 2 +- sys/netgraph/bluetooth/socket/ng_btsocket_l2cap.c | 3 +-- sys/netgraph/bluetooth/socket/ng_btsocket_rfcomm.c | 3 +-- sys/netgraph/bluetooth/socket/ng_btsocket_sco.c | 2 +- sys/netinet/tcp_input.c | 7 +++---- sys/netinet/tcp_subr.c | 4 ++-- sys/rpc/svc_vc.c | 2 +- 11 files changed, 19 insertions(+), 23 deletions(-) diff --git a/sys/dev/hyperv/hvsock/hv_sock.c b/sys/dev/hyperv/hvsock/hv_sock.c index bcc237271465..00e296fcd335 100644 --- a/sys/dev/hyperv/hvsock/hv_sock.c +++ b/sys/dev/hyperv/hvsock/hv_sock.c @@ -1482,7 +1482,7 @@ hvsock_open_conn_passive(struct vmbus_channel *chan, struct socket *so, int error; /* Do nothing if socket is not listening */ - if ((so->so_options & SO_ACCEPTCONN) == 0) { + if (!SOLISTENING(so)) { HVSOCK_DBG(HVSOCK_DBG_ERR, "%s: socket is not a listening one\n", __func__); return; diff --git a/sys/kern/uipc_accf.c b/sys/kern/uipc_accf.c index 3ca64dd21e25..792c53c7baff 100644 --- a/sys/kern/uipc_accf.c +++ b/sys/kern/uipc_accf.c @@ -172,7 +172,7 @@ accept_filt_getopt(struct socket *so, struct sockopt *sopt) error = 0; afap = malloc(sizeof(*afap), M_TEMP, M_WAITOK | M_ZERO); SOCK_LOCK(so); - if ((so->so_options & SO_ACCEPTCONN) == 0) { + if (!SOLISTENING(so)) { error = EINVAL; goto out; } @@ -208,7 +208,7 @@ accept_filt_setopt(struct socket *so, struct sockopt *sopt) int wakeup; SOCK_LOCK(so); - if ((so->so_options & SO_ACCEPTCONN) == 0) { + if (!SOLISTENING(so)) { SOCK_UNLOCK(so); return (EINVAL); } @@ -278,8 +278,7 @@ accept_filt_setopt(struct socket *so, struct sockopt *sopt) * without first removing it. */ SOCK_LOCK(so); - if ((so->so_options & SO_ACCEPTCONN) == 0 || - so->sol_accept_filter != NULL) { + if (!SOLISTENING(so) || so->sol_accept_filter != NULL) { error = EINVAL; goto out; } diff --git a/sys/kern/uipc_socket.c b/sys/kern/uipc_socket.c index 852132e45e58..070ed440b500 100644 --- a/sys/kern/uipc_socket.c +++ b/sys/kern/uipc_socket.c @@ -1176,7 +1176,6 @@ int soclose(struct socket *so) { struct accept_queue lqueue; - bool listening; int error = 0; KASSERT(!(so->so_state & SS_NOFDREF), ("soclose: SS_NOFDREF on enter")); @@ -1212,7 +1211,7 @@ drop: (*so->so_proto->pr_usrreqs->pru_close)(so); SOCK_LOCK(so); - if ((listening = (so->so_options & SO_ACCEPTCONN))) { + if (SOLISTENING(so)) { struct socket *sp; TAILQ_INIT(&lqueue); @@ -1233,7 +1232,7 @@ drop: KASSERT((so->so_state & SS_NOFDREF) == 0, ("soclose: NOFDREF")); so->so_state |= SS_NOFDREF; sorele(so); - if (listening) { + if (SOLISTENING(so)) { struct socket *sp, *tsp; TAILQ_FOREACH_SAFE(sp, &lqueue, so_list, tsp) { @@ -1313,7 +1312,8 @@ soconnectat(int fd, struct socket *so, struct sockaddr *nam, struct thread *td) { int error; - if (so->so_options & SO_ACCEPTCONN) + /* XXXMJ racy */ + if (SOLISTENING(so)) return (EOPNOTSUPP); CURVNET_SET(so->so_vnet); diff --git a/sys/kern/uipc_syscalls.c b/sys/kern/uipc_syscalls.c index 23fae343924a..18505b54d603 100644 --- a/sys/kern/uipc_syscalls.c +++ b/sys/kern/uipc_syscalls.c @@ -338,7 +338,7 @@ kern_accept4(struct thread *td, int s, struct sockaddr **name, if (error != 0) return (error); head = headfp->f_data; - if ((head->so_options & SO_ACCEPTCONN) == 0) { + if (!SOLISTENING(head)) { error = EINVAL; goto done; } diff --git a/sys/kern/uipc_usrreq.c b/sys/kern/uipc_usrreq.c index 4466ae8822cd..a01171424320 100644 --- a/sys/kern/uipc_usrreq.c +++ b/sys/kern/uipc_usrreq.c @@ -1602,7 +1602,7 @@ unp_connectat(int fd, struct socket *so, struct sockaddr *nam, goto bad2; } if (connreq) { - if (so2->so_options & SO_ACCEPTCONN) { + if (SOLISTENING(so2)) { CURVNET_SET(so2->so_vnet); so2 = sonewconn(so2, 0); CURVNET_RESTORE(); diff --git a/sys/netgraph/bluetooth/socket/ng_btsocket_l2cap.c b/sys/netgraph/bluetooth/socket/ng_btsocket_l2cap.c index 2bd15ac35895..cd620fe3aef9 100644 --- a/sys/netgraph/bluetooth/socket/ng_btsocket_l2cap.c +++ b/sys/netgraph/bluetooth/socket/ng_btsocket_l2cap.c @@ -2733,8 +2733,7 @@ ng_btsocket_l2cap_pcb_by_addr(bdaddr_p bdaddr, int psm) mtx_assert(&ng_btsocket_l2cap_sockets_mtx, MA_OWNED); LIST_FOREACH(p, &ng_btsocket_l2cap_sockets, next) { - if (p->so == NULL || !(p->so->so_options & SO_ACCEPTCONN) || - p->psm != psm) + if (p->so == NULL || !SOLISTENING(p->so) || p->psm != psm) continue; if (bcmp(&p->src, bdaddr, sizeof(p->src)) == 0) diff --git a/sys/netgraph/bluetooth/socket/ng_btsocket_rfcomm.c b/sys/netgraph/bluetooth/socket/ng_btsocket_rfcomm.c index 95b28e6cc5e7..c0704bce55fa 100644 --- a/sys/netgraph/bluetooth/socket/ng_btsocket_rfcomm.c +++ b/sys/netgraph/bluetooth/socket/ng_btsocket_rfcomm.c @@ -3398,8 +3398,7 @@ ng_btsocket_rfcomm_pcb_listener(bdaddr_p src, int channel) mtx_lock(&ng_btsocket_rfcomm_sockets_mtx); LIST_FOREACH(pcb, &ng_btsocket_rfcomm_sockets, next) { - if (pcb->channel != channel || - !(pcb->so->so_options & SO_ACCEPTCONN)) + if (pcb->channel != channel || !SOLISTENING(pcb->so)) continue; if (bcmp(&pcb->src, src, sizeof(*src)) == 0) diff --git a/sys/netgraph/bluetooth/socket/ng_btsocket_sco.c b/sys/netgraph/bluetooth/socket/ng_btsocket_sco.c index da8f22befc79..068b1890f27f 100644 --- a/sys/netgraph/bluetooth/socket/ng_btsocket_sco.c +++ b/sys/netgraph/bluetooth/socket/ng_btsocket_sco.c @@ -1829,7 +1829,7 @@ ng_btsocket_sco_pcb_by_addr(bdaddr_p bdaddr) LIST_FOREACH(p, &ng_btsocket_sco_sockets, next) { mtx_lock(&p->pcb_mtx); - if (p->so == NULL || !(p->so->so_options & SO_ACCEPTCONN)) { + if (p->so == NULL || !SOLISTENING(p->so)) { mtx_unlock(&p->pcb_mtx); continue; } diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c index 19232218170b..6d86e43f07dd 100644 --- a/sys/netinet/tcp_input.c +++ b/sys/netinet/tcp_input.c @@ -950,8 +950,7 @@ findpcb: } if ((inp->inp_flowtype == M_HASHTYPE_NONE) && (M_HASHTYPE_GET(m) != M_HASHTYPE_NONE) && - ((inp->inp_socket == NULL) || - (inp->inp_socket->so_options & SO_ACCEPTCONN) == 0)) { + ((inp->inp_socket == NULL) || !SOLISTENING(inp->inp_socket))) { inp->inp_flowid = m->m_pkthdr.flowid; inp->inp_flowtype = M_HASHTYPE_GET(m); } @@ -1061,9 +1060,9 @@ findpcb: * state) we look into the SYN cache if this is a new connection * attempt or the completion of a previous one. */ - KASSERT(tp->t_state == TCPS_LISTEN || !(so->so_options & SO_ACCEPTCONN), + KASSERT(tp->t_state == TCPS_LISTEN || !SOLISTENING(so), ("%s: so accepting but tp %p not listening", __func__, tp)); - if (tp->t_state == TCPS_LISTEN && (so->so_options & SO_ACCEPTCONN)) { + if (tp->t_state == TCPS_LISTEN && SOLISTENING(so)) { struct in_conninfo inc; bzero(&inc, sizeof(inc)); diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c index ec162d889902..32a814ac2c4e 100644 --- a/sys/netinet/tcp_subr.c +++ b/sys/netinet/tcp_subr.c @@ -3666,8 +3666,8 @@ sysctl_drop(SYSCTL_HANDLER_ARGS) tcp_twclose(tw, 0); else INP_WUNLOCK(inp); - } else if (!(inp->inp_flags & INP_DROPPED) && - !(inp->inp_socket->so_options & SO_ACCEPTCONN)) { + } else if ((inp->inp_flags & INP_DROPPED) == 0 && + !SOLISTENING(inp->inp_socket)) { tp = intotcpcb(inp); tp = tcp_drop(tp, ECONNABORTED); if (tp != NULL) diff --git a/sys/rpc/svc_vc.c b/sys/rpc/svc_vc.c index 6cff3434364d..67951108b01c 100644 --- a/sys/rpc/svc_vc.c +++ b/sys/rpc/svc_vc.c @@ -329,7 +329,7 @@ svc_vc_accept(struct socket *head, struct socket **sop) short nbio; /* XXXGL: shouldn't that be an assertion? */ - if ((head->so_options & SO_ACCEPTCONN) == 0) { + if (!SOLISTENING(head)) { error = EINVAL; goto done; }