From nobody Thu Jun 25 21:35:07 2026 X-Original-To: dev-commits-src-all@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 4gmXCP08F4z6jPXG for ; Thu, 25 Jun 2026 21:35:13 +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 4gmXCN6jSqz3hRb for ; Thu, 25 Jun 2026 21:35:12 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1782423312; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=EqigRkjxJopeSjd6WHsE/kyhElaBf2GDY73h1SKZEB0=; b=WMrEaHiED0cdLBkAyTsxjYiFnq7Ifel6MuUnKGfG69+bEepow+DWa3YFga7R7pZ2iS9Ivc V2pVxr5cLNHgFRzyvIUfeC1u7Vr30QwaYg2p1u/djD6xr3F9Rq9WTYzm3UDCO7/m5FAL02 P/TFDQu1u7fOu4640+i5H2Vld8x3Q8wG1s1RE5Dn44AAgs8kPvrncoJrl8r2yjAjVFUuk3 ztWFbztyeaA7EGnlXA53AxHrtDRCuVQ+WscRzHvN+ay5u16yq/hd+/2KWgtlpEBUfIuzWb xQQGWXKI770S9CyHnpmkYsyTW5/afDWpQ+WFI0weOmPQ2VzHEGWzbPH+dDEVyw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1782423312; a=rsa-sha256; cv=none; b=povrUfACyA2DgiaM7vAl2XnnlzxDzHYyVYAnbJK2cif7rNUIWXaJp8mWv7L0OoSs8wzP+f SOFd3c3aj0BDDttCBw3vAo1s71ui4DYfdx3nMfHRJqVI+o5EaiwNAd7XWmqVnqk0eXCK2N tc923UlnAHkHhS91JOv+8FCxvCFDlugDbyR6eqEiDIFebb5Y6RX9XfHzKhki0FzdsYWGEm RbkdlcTgT6B21A6WXyQt8NgbHrbn4Q34ixhJ1Y4nWLur0FnLCs5yDuI66OMhe5zAuBswPn feg7sSNgoxRI0w6xD0d+srtmdVe55cjD2Ay1bCovcMQfEFAAcS9p0kheUq4njA== 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=1782423312; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=EqigRkjxJopeSjd6WHsE/kyhElaBf2GDY73h1SKZEB0=; b=srENWQ2yHzn67ofCOytA45tWMWLCix38CaEunJkXq+0MZthMyFunCrjuu+PjAR4/L+fZsd KWBn4e1LXTHg0ZhEKdtR/VfHJHn6gQ4QM8FoUomy4UgvETH5ImKE3ERSC/UkIO73KWjafO cJ2kSgsJwWy9k1Mv1nnEZjbLLrZ8GAljBXN78ml/BB6c8NlbXgcBKlEfqW5GYsdvg6YEoo 9s2x4LSy+1OxCWY8IjB56Lti48ZYI78E/E6k49yQPfUtIJ3fgFKDOkWmQRljeP2CIiWPYb z3LMOnHvRSCNzslzkxp5EzNHLfev3/DCGAae0qXZa6Pdrr6WE7bs/vb0s5BwkQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gmXCN5Jrrz1N3b for ; Thu, 25 Jun 2026 21:35:12 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 2297c by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Thu, 25 Jun 2026 21:35:07 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Gleb Smirnoff Subject: git: 90ea8e89d9b7 - main - netinet6: refactor in6_pcbconnect() List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@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: glebius X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 90ea8e89d9b751e8b5ae90ef3397883b035788e5 Auto-Submitted: auto-generated Date: Thu, 25 Jun 2026 21:35:07 +0000 Message-Id: <6a3d9f0b.2297c.3bbc7961@gitrepo.freebsd.org> The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=90ea8e89d9b751e8b5ae90ef3397883b035788e5 commit 90ea8e89d9b751e8b5ae90ef3397883b035788e5 Author: Gleb Smirnoff AuthorDate: 2026-06-25 21:34:38 +0000 Commit: Gleb Smirnoff CommitDate: 2026-06-25 21:34:38 +0000 netinet6: refactor in6_pcbconnect() If the inpcb is already bound to a local address, there is no reason to call in6_pcbladdr(). If the inpcb is already bound to a local port, there is no reason to call in_pcb_lport_dest(). In the opposite case, if the inpcb is not bound, and we are about to choose a non-conflicting local addr:port, then there is no reason to call in6_pcblookup_internal(). This change makes in6_pcbconnect() to look much more alike the IPv4 in_pcbconnect(). I tracked this strange logic all the way down to initial KAME import and failed to find any reasoning for it. Reviewed by: pouria Differential Revision: https://reviews.freebsd.org/D57534 --- sys/netinet6/in6_pcb.c | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/sys/netinet6/in6_pcb.c b/sys/netinet6/in6_pcb.c index 0cf6be2f9b33..b8651fd8a2be 100644 --- a/sys/netinet6/in6_pcb.c +++ b/sys/netinet6/in6_pcb.c @@ -465,25 +465,18 @@ in6_pcbconnect(struct inpcb *inp, struct sockaddr_in6 *sin6, struct ucred *cred, bzero(&laddr6, sizeof(laddr6)); laddr6.sin6_family = AF_INET6; - /* - * Call inner routine, to assign local interface address. - * in6_pcbladdr() may automatically fill in sin6_scope_id. - */ INP_HASH_WLOCK(pcbinfo); - if ((error = in6_pcbladdr(inp, sin6, &laddr6.sin6_addr, - sas_required)) != 0) { - INP_HASH_WUNLOCK(pcbinfo); - return (error); - } - - if (in6_pcblookup_internal(pcbinfo, &sin6->sin6_addr, sin6->sin6_port, - IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_laddr) ? - &laddr6.sin6_addr : &inp->in6p_laddr, inp->inp_lport, 0, - M_NODOM, RT_ALL_FIBS) != NULL) { - INP_HASH_WUNLOCK(pcbinfo); - return (EADDRINUSE); - } if (IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_laddr)) { + /* + * Call inner routine, to assign local interface address. + * in6_pcbladdr() may automatically fill in sin6_scope_id. + */ + error = in6_pcbladdr(inp, sin6, &laddr6.sin6_addr, + sas_required); + if (__predict_false(error)) { + INP_HASH_WUNLOCK(pcbinfo); + return (error); + } if (inp->inp_lport == 0) { error = in_pcb_lport_dest(inp, (struct sockaddr *) &laddr6, &inp->inp_lport, @@ -495,7 +488,14 @@ in6_pcbconnect(struct inpcb *inp, struct sockaddr_in6 *sin6, struct ucred *cred, } } inp->in6p_laddr = laddr6.sin6_addr; + } else if (in6_pcblookup_internal(pcbinfo, &sin6->sin6_addr, + sin6->sin6_port, &inp->in6p_laddr, inp->inp_lport, 0, + M_NODOM, RT_ALL_FIBS) != NULL) { + INP_HASH_WUNLOCK(pcbinfo); + return (EADDRINUSE); } + MPASS(inp->inp_lport != 0); + MPASS(!IN6_IS_ADDR_UNSPECIFIED(&inp->in6p_laddr)); inp->in6p_faddr = sin6->sin6_addr; inp->inp_fport = sin6->sin6_port; /* update flowinfo - draft-itojun-ipv6-flowlabel-api-00 */