From nobody Mon Aug 10 17:40:35 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4hJhqT0FDyz6X2wG for ; Mon, 10 Aug 2026 17:40:36 +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 "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hJhqR66mFz48lg for ; Mon, 10 Aug 2026 17:40:35 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786383636; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=+equ4Hclqi0wAD3Sq5Dutv1nRZXwmRSB926iFyfzGnU=; b=dMz9LrPXxHRcwFkO6gO3+WSkCel3wFDpcS7NFzRcyfI54riHbJ98cDqNJA4WU23QisDatf vizcQJ1zWTGGdCchnxNc4dYEKidT472JJ3BRP+VnRG25g2Wnw4PcJBsUlgqdvbWQmSLFdd H1HfJZAdDhVF+Iv0/MKwn9p5Jnkwa7qIB59MHDfK+4IhSZuoh2Zx6RgfO8KwHt/ayoDZIM WPFHuAOkU0beFeY1QulXVIL2JCrq7/rLo0kZ6Cqew+E6E0FT5PDA68iyearpt9ZVjZ7oYc 7bhWuwdLRyq9Oih5JE0gH/ZhuDtj+JTzb6QR8fRMGx2KYjCCqiZ16TnDXfieTg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1786383636; a=rsa-sha256; cv=none; b=D7/Dj9i1sWS1XCLyUp1B1yVM0wyWso6famUOMvpyG+6Od9T8dzEH0hud2zqpVcYsa7HOED jp6pvRir2XmamZ7dcbj5lHOuut9vv+VifsrexritnS3HV9bksRpunLJX226BgavO7RXFmK kKrezUmJtQhATFr9R9qWcV0FpmhaquM0JIdE9G4y/smCAlHlKA1VHCuFqbEeWmGQJRCmqz LOdN8J9Ck36TYyHpH5j/SndStJTTaCDP7T74+/lj0216ekxj2rwFULCCOOmKr/m6He6D/L jupqfBeSycfJ93XqZsp6we2jr2CMKU88ZS08agu3iEv6GtITOvlyb8tQKugYkQ== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786383636; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=+equ4Hclqi0wAD3Sq5Dutv1nRZXwmRSB926iFyfzGnU=; b=LhcDer6UmS8tFTDyjdxfavyrpAwchXmWixoSqknD9n9lWLt+472C9hf/EgXHdJVyodgexF 6X46gMfPuQPBITf/sJLWA7hByk/1hC7MQqpI0xcQZIWuyHGeV77Q6qcQwjEreXGPvRvbQP BYXa/xM7+1GSLJqXrdsZEfiFwFWDFkYKVAtzglVKYdyOzk0PiXVatuwl0Hz6X5ongqxrfS aNrzb/FKSYl0FnVbEBAhK1m+NU0j1Qj/RfWF6nH87fc+f2+eob2euZ/25sC0LsAfrq4ijm Jhf4zZS5x5BzY/S5acVKuNZQuwqMCsrnJughFhWGyxSGkFz3xR2792ubJq6Q9g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hJhqR48Q1z3ql for ; Mon, 10 Aug 2026 17:40:35 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 405c2 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 10 Aug 2026 17:40:35 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: John Ericson From: Mark Johnston Subject: git: 9b27a22ac696 - main - unix: factor unp_connectat_peer() out of unp_connectat() List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list 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/main X-Git-Reftype: branch X-Git-Commit: 9b27a22ac69632d50e3561fd15ca710c022f3e70 Auto-Submitted: auto-generated Date: Mon, 10 Aug 2026 17:40:35 +0000 Message-Id: <6a7a0d13.405c2.302bb8f0@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=9b27a22ac69632d50e3561fd15ca710c022f3e70 commit 9b27a22ac69632d50e3561fd15ca710c022f3e70 Author: John Ericson AuthorDate: 2026-08-10 15:04:27 +0000 Commit: Mark Johnston CommitDate: 2026-08-10 17:31:21 +0000 unix: factor unp_connectat_peer() out of unp_connectat() Move the "resolve a connectat(2) target to a referenced peer socket" half of `unp_connectat()` -- the `namei()` lookup and `unp_vnode_peer()` call -- into a helper, leaving `unp_connectat()` with the connection state machine plus a single `unp_connect_peer()`. This is where the next change grows the ways a peer can be named; keeping it a helper up front keeps that change focused on the new resolution logic. No functional change intended. Signed-off-by: John Ericson Assisted-by: Claude Code (Claude Opus 4.8 and Fable 5) Reviewed by: markj MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D58462 --- sys/kern/uipc_usrreq.c | 53 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 35 insertions(+), 18 deletions(-) diff --git a/sys/kern/uipc_usrreq.c b/sys/kern/uipc_usrreq.c index 418c43a8ac85..60b0f3b8706e 100644 --- a/sys/kern/uipc_usrreq.c +++ b/sys/kern/uipc_usrreq.c @@ -296,6 +296,8 @@ static int unp_connectat(int, struct socket *, struct sockaddr *, struct thread *, struct socket **); static int unp_connect_peer(struct socket *, struct unpcb *, struct sockaddr **, struct thread *, bool); +static int unp_connectat_peer(struct thread *, int, const char *, + struct socket **); static int unp_vnode_peer(struct vnode *, struct thread *, struct socket **); static void unp_connect2(struct socket *, struct socket *, bool); @@ -2934,10 +2936,8 @@ unp_connectat(int fd, struct socket *so, struct sockaddr *nam, { struct socket *so2; struct unpcb *unp; - struct nameidata nd; char buf[SOCK_MAXADDRLEN]; struct sockaddr *sa; - cap_rights_t rights; const char *path; int error, len; bool connreq; @@ -2994,22 +2994,7 @@ unp_connectat(int fd, struct socket *so, struct sockaddr *nam, sa = malloc(sizeof(struct sockaddr_un), M_SONAME, M_WAITOK); else sa = NULL; - NDINIT_ATRIGHTS(&nd, LOOKUP, FOLLOW | LOCKSHARED | LOCKLEAF | - (fd == AT_FDCWD ? 0 : EMPTYPATH), UIO_SYSSPACE, buf, fd, - cap_rights_init_one(&rights, CAP_CONNECTAT)); - error = namei(&nd); - if (error) - goto out; - NDFREE_PNBUF(&nd); - - /* - * Resolve the vnode to a referenced peer socket and drop the vnode - * before connecting: the reference keeps the peer stable, so no vnode - * lock is held across unp_connect_peer() (which matters for the - * return_locked datagram fast path). - */ - error = unp_vnode_peer(nd.ni_vp, td, &so2); - vput(nd.ni_vp); + error = unp_connectat_peer(td, fd, buf, &so2); if (error != 0) goto out; error = unp_connect_peer(so, sotounpcb(so2), &sa, td, @@ -3031,6 +3016,38 @@ out: return (error); } +/* + * Resolve a connectat(2) target -- descriptor 'fd' and the pathname in 'buf' -- + * to a referenced peer unix socket in '*so2p'. The caller must release it with + * sorele(). + */ +static int +unp_connectat_peer(struct thread *td, int fd, const char *buf, + struct socket **so2p) +{ + struct nameidata nd; + cap_rights_t rights; + int error; + + NDINIT_ATRIGHTS(&nd, LOOKUP, FOLLOW | LOCKSHARED | LOCKLEAF | + (fd == AT_FDCWD ? 0 : EMPTYPATH), UIO_SYSSPACE, buf, fd, + cap_rights_init_one(&rights, CAP_CONNECTAT)); + error = namei(&nd); + if (error != 0) + return (error); + NDFREE_PNBUF(&nd); + + /* + * Resolve the vnode to a referenced peer socket and drop the vnode + * before connecting: the reference keeps the peer stable, so no vnode + * lock is held across unp_connect_peer() (which matters for the + * return_locked datagram fast path). + */ + error = unp_vnode_peer(nd.ni_vp, td, so2p); + vput(nd.ni_vp); + return (error); +} + /* * Resolve locked vnode 'vp' to the unix-domain socket it names and return a * referenced peer socket in '*so2p'. As the connect(2)-time resolution, this