From nobody Wed Jan 10 14:20:37 2024 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 4T991x3WdDz573xj; Wed, 10 Jan 2024 14:20:37 +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 4T991x33yXz4q51; Wed, 10 Jan 2024 14:20:37 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1704896437; 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=IrFvxwzz1RL8phAsoMV08/53CnzCcGYjdgM9Vb8HcHc=; b=p59wHFG+3JfRObubGnbIDrQNAD0bFJD5LQ7KAVkzP4h5JAaJo5dlRMaAEdBu7bMXtJ3Gkv 0wnKz6TGWwdb7Hj8Nd01ifv8VjaGU4Udjug6Faz+a25MSCCiHJksMAS4deKxnGXRooX++g LAn9b9e89dY/3trOctlxEqAcMK2VLQyH5FiRzpu3LY6G7FjMIG8sSjVT7flm/OQislfOBn QKJnLSUBjrUbXQICUfjYxgJqjMwh5Y1anMQmgXw9zLnaJrzWjVUUDzKW6oAmmsSnu2fkoL ibyjR62P7hSrLM4Q8evNvopWFw26Xfu7Av2kGHkl3MIS8zRWejCkyR9bX6C6Eg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1704896437; 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=IrFvxwzz1RL8phAsoMV08/53CnzCcGYjdgM9Vb8HcHc=; b=xjlu7XQ9dAWsfB7w/Mbm8t+TmJX5xCqIlLiSAmbMzirDDe+de1nWZTd81sdkdlJJt/YLiR 1Cskoq+Q9V6ycUdc2A0V33GC0/pxdOA3LNM4M6IlKDuhWrzylR0R0hlVdpUNamfUPv7qAJ Yj+c87eb+EWnDrM2ODtLV/coqJz3IFcaZCnDsLlohgnc8hZFr7rC3z4ii6icb7X1V1kM96 kOHRT4vsV4/1fYM0Ps/NgBI4HauKEczm0S1zqhbp+8X1/f4sjBB/OQNB4D4QWCRF0Q6huJ yJYvf607dZuDkjXAWvBrFgUIfVBpvKm0S+mlUDVHdbuVjLQjJO860eNnlnPfmg== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1704896437; a=rsa-sha256; cv=none; b=bdC+YP3oZR+jdWBDm+ZpH0dNfPwxIY9MgBZXbOEzu43GTK44IXk8rQrjZPsaSAVIm5gEej 9y1h8z5RGIPvb9rpMe63M+UbNt5Cptab9/NL77xNweTZODSxdaOcZRM8KyzQ2ZB56ci6P+ gFdmMVh2nnHNn01PO8HPIsKer/nj1OJA/m6gjuMn1seFPN01StbgEADmCHXcVJB5W2ItBZ DeOJxn4hlcqLUOBYIHucwcnIoUqFvGBDQ60d7/3wcLgVjE3A9s579npBhkei1EmHep6wg9 fwH45/3gG7yzrlOYFWAXxcnKgcdvUDfhxxVf9b+shxE14QIbulXA1PDzHjsqTQ== 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 4T991x27nvzfDF; Wed, 10 Jan 2024 14:20:37 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.17.1/8.17.1) with ESMTP id 40AEKbRD041711; Wed, 10 Jan 2024 14:20:37 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.17.1/8.17.1/Submit) id 40AEKbmc041708; Wed, 10 Jan 2024 14:20:37 GMT (envelope-from git) Date: Wed, 10 Jan 2024 14:20:37 GMT Message-Id: <202401101420.40AEKbmc041708@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Ed Maste Subject: git: 1165116ada35 - stable/13 - IPv6: fix problem with duplicate port assignment with v4-mapped addrs 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: Sender: owner-dev-commits-src-all@freebsd.org X-BeenThere: dev-commits-src-all@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: emaste X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 1165116ada353364e1d1570d1d23bb3d18d28394 Auto-Submitted: auto-generated The branch stable/13 has been updated by emaste: URL: https://cgit.FreeBSD.org/src/commit/?id=1165116ada353364e1d1570d1d23bb3d18d28394 commit 1165116ada353364e1d1570d1d23bb3d18d28394 Author: Mike Karels AuthorDate: 2022-07-29 14:23:23 +0000 Commit: Ed Maste CommitDate: 2024-01-10 13:50:55 +0000 IPv6: fix problem with duplicate port assignment with v4-mapped addrs In in_pcb_lport_dest(), if an IPv6 socket does not match any other IPv6 socket using in6_pcblookup_local(), and if the socket can also connect to IPv4 (the INP_IPV4 vflag is set), check for IPv4 matches as well. Otherwise, we can allocate a port that is used by an IPv4 socket (possibly one created from IPv6 via the same procedure), and then connect() can fail with EADDRINUSE, when it could have succeeded if the bound port was not in use. PR: 265064 Submitted by: firk at cantconnect.ru (with modifications) Reviewed by: bz, melifaro Differential Revision: https://reviews.freebsd.org/D36012 (cherry picked from commit 637f317c6d9c0c689677f499fc78ac545b192071) --- sys/netinet/in_pcb.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/sys/netinet/in_pcb.c b/sys/netinet/in_pcb.c index 4c4f4050595a..61079db56bdb 100644 --- a/sys/netinet/in_pcb.c +++ b/sys/netinet/in_pcb.c @@ -758,7 +758,7 @@ in_pcb_lport_dest(struct inpcb *inp, struct sockaddr *lsa, u_short *lportp, } #ifdef INET - laddr.s_addr = INADDR_ANY; + laddr.s_addr = INADDR_ANY; /* used by INET6+INET below too */ if ((inp->inp_vflag & (INP_IPV4|INP_IPV6)) == INP_IPV4) { if (lsa != NULL) laddr = ((struct sockaddr_in *)lsa)->sin_addr; @@ -809,9 +809,16 @@ in_pcb_lport_dest(struct inpcb *inp, struct sockaddr *lsa, u_short *lportp, #endif } else { #ifdef INET6 - if ((inp->inp_vflag & INP_IPV6) != 0) + if ((inp->inp_vflag & INP_IPV6) != 0) { tmpinp = in6_pcblookup_local(pcbinfo, &inp->in6p_laddr, lport, lookupflags, cred); +#ifdef INET + if (tmpinp == NULL && + (inp->inp_vflag & INP_IPV4)) + tmpinp = in_pcblookup_local(pcbinfo, + laddr, lport, lookupflags, cred); +#endif + } #endif #if defined(INET) && defined(INET6) else