From nobody Thu Jun 25 21:35:07 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 4gmXCJ08XRz6jPMY for ; Thu, 25 Jun 2026 21:35:08 +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 4gmXCH6K9Tz3hHM for ; Thu, 25 Jun 2026 21:35:07 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1782423307; 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=Kuyv+ummZviDj/FOPHLV/48JeCvi6fHKN8FpjbJhcnMGeMwcDH8dqKz0pFfgJnL4+T/EuO tUdXaRot7ZUfP/L4QK0VQ8dD1tj3kxFyayUtDO/hMwNcf95uSRQ8AVf4DBVumBz/bKXaX7 vDnhxprnYGLkcQdg3U6nTaWQfHOVyqrmeQMrOdZoWpCZfgeGC6kzh2rBFEISsOQcB1KX/G 22MG7cwwtcsrDcLEKsdTfD3S1fD4WWqZ6UXWRdd1qtJRaPZLnX6MYWQ4hyXcK1ORcH0Q3t sR2zEAzJzCzAmQpZsIxd0Bq0cUDA4jRkIgf790JI9+OGv4x1ZNRFHyWTf/nn5A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1782423307; a=rsa-sha256; cv=none; b=HtxNHEUp6GL1JyZVEEsZpUlNdVj/+i7czAnrp7FP3dLeJy35gQS5EELPuE3ez5afPj8zaF eID77AD6P6siJlhj4xlwTbksv9zMXggtq0GnWdyvVj8vUkwBgMqJUSq7+rqSmSVqYQUxRK R3jIBJRJf0Pr8cltUC7E6p8gtLcH1xPICw9cUJXV1snBWPX563a6c6gGhM6cPaVCeTZWcc Yno1lOTV8Kd84tB6/hQ5ktdbHJsifgFiAe0he5++u58vx2UJ8bhnDlz2/GE7I7vkfIM/yU aq65niobJnH/iRbJv2p+BPXxLDYZ88yDkJZdjbRP13ul4SkuII6DrwKvRGMP4w== 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=1782423307; 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=btOr0RNnFb5lTY86yTls6q1R92nNYXey6qYtvPFyJXBqrmDHKoIsQkP0PuB2dDjgdHLtDe iyTr/TEK6B4yyBcBWLidkzVrEb2TIqYvl9Q9e1AQ25f0yCVUwpTxdQukAACfPRs8PdiE4g 78Bm4HsfkunwIWtTKbeqV7eIl8IEriqy2a+mPoeG8P7JTUA+9HfilOV8AcC2AK61b7wvby AHkiQidIGiM/tuxOZFn+sBhHtk2ZDSkEgpjBNKeJUAuojJDW6QjnlzLOVetZXxcLuyQhdU d71d4Ek6uJHf/zIHRAJVYxmN//N4YCSzx0TWsjn7EgUFZY4tNDdyUJjXr7UK4g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4gmXCH4nbzz1N8G for ; Thu, 25 Jun 2026 21:35:07 +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 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: 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 */