From nobody Tue Jan 28 05:03:08 2025 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 4YhtTT0Tpgz5lycW; Tue, 28 Jan 2025 05:03:09 +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 "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4YhtTS6Ws4z3H8t; Tue, 28 Jan 2025 05:03:08 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1738040588; 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=8gxhXnyQnOe3AwqzpCI6WH6CWQLObowSmi/0rdUqKn0=; b=ZtbkSs4XtXawijAaU2FQRTdgeIkV+hD2seUVQ6ExMItMAWlTXA51O9wH/J2KD2+znEt6m2 SRLxU1cwrtfQf9XnZez0/NY4Y3NIJ4XMFjTVhsPjzvOajMfffAOYGGRtGAG3+PBYGZqHIO stWxxfvgibt+6GfIWZN2/WyacxFnmsdUuCZGkHCC1ONeK+aZ9GFqYlXYTvDWZKOXFbMzOM Uwa0bHqU1eGdeW48tn6n0+c5QuLFWjuwHeIABNJZmi87YgfI6ZMlbVDBMbswM1gSKf8W45 J7EKRJYTlgqPUp9L0q7jJlzjciZlCMLMHZLBaePvopOnT0ziwgDtniwFdup8Rg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1738040588; 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=8gxhXnyQnOe3AwqzpCI6WH6CWQLObowSmi/0rdUqKn0=; b=lefTipCv28MEoVhGWhhyR6LMokD7zFVLcGyagOljrCx1hD1saPNDXVTwbeSMe3eFpMwDvX ENpAirDrYDxt1E2x/VXApBU6+c+w0eu9EkaCvxcjf7mxq3RrquAfVHXBBXq+n2rwhNbw17 JLpd2Yufrt+XNwvkWKXSepGgOYd8I9t8HWfvZJyjN3icNcOG5hd9KPLl5vnQdP5srnNm+C zHdzxK1+H+tfC8zeF1khj6R3NXbMhAAAECcIVqWQuLO9QkjMWs968PoUG0xHQwWKttIspk prHtLdm9HB8vG9x5IiNXJjFeIaFqlaYh8nLfxJ5+Z/BaPSmjdEfjIC9i4aLO7w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1738040588; a=rsa-sha256; cv=none; b=K0TNQ98jQXwZXwUt87SODLH4d0/cQvJLsXUvyN8UK6SRLtcjhIfFdprv4e6HjHGGTl5HgV ytAgyjUgAPIY+uj5w6DZHImxPagmMsEO3WEdvVXBpGFnGQj1RRF9VcuKhfzNCmnumJGVpk O/pC3md4aifGWyglQigou/l2fjI2yWQizRN3BTD8BlT6kzootOqXAmCcM2BPEhqFJXPrBy gEKljQeS5lUzrlBpeLvJ7Asz/9wtJKGGPPDjBWtbhwC8LeV3xdefDr8bNZDyYX28e16u0O 7LKmRxOcu7N/D57P7iDizyjHF7qbtOghDbidagtuUilWY+SCQ7MTfgxKrfd8Yw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none 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 4YhtTS65qvz10ZV; Tue, 28 Jan 2025 05:03:08 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 50S53837010922; Tue, 28 Jan 2025 05:03:08 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 50S5385J010919; Tue, 28 Jan 2025 05:03:08 GMT (envelope-from git) Date: Tue, 28 Jan 2025 05:03:08 GMT Message-Id: <202501280503.50S5385J010919@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Gleb Smirnoff Subject: git: 06bf119f265c - main - sockets/tcp: quick fix for regression with SO_REUSEPORT_LB 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 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: 06bf119f265c38c0ed16a1461fdc43356c3edf7a Auto-Submitted: auto-generated The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=06bf119f265c38c0ed16a1461fdc43356c3edf7a commit 06bf119f265c38c0ed16a1461fdc43356c3edf7a Author: Gleb Smirnoff AuthorDate: 2025-01-28 05:02:22 +0000 Commit: Gleb Smirnoff CommitDate: 2025-01-28 05:02:22 +0000 sockets/tcp: quick fix for regression with SO_REUSEPORT_LB There was a long living problem that pr_listen is called every time on consecutive listen(2) syscalls. Up until today it produces spurious TCP state change events in tracing software and other harmless problems. But with 7cbb6b6e28db we started to call LIST_REMOVE() twice on the same entry. This is quite ugly, but quick and robust fix against regression, that we decided to put in the scope of the January stabilization week. A better refactoring will happen later. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D48703 Fixes: 7cbb6b6e28db33095a1cf7a8887921a5ec969824 --- sys/netinet/tcp_usrreq.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/sys/netinet/tcp_usrreq.c b/sys/netinet/tcp_usrreq.c index 3e73e448a9f7..c6713a0bb4cb 100644 --- a/sys/netinet/tcp_usrreq.c +++ b/sys/netinet/tcp_usrreq.c @@ -355,9 +355,10 @@ out: static int tcp_usr_listen(struct socket *so, int backlog, struct thread *td) { - int error = 0; struct inpcb *inp; struct tcpcb *tp; + int error = 0; + bool already_listening; inp = sotoinpcb(so); KASSERT(inp != NULL, ("tcp_usr_listen: inp == NULL")); @@ -369,6 +370,7 @@ tcp_usr_listen(struct socket *so, int backlog, struct thread *td) tp = intotcpcb(inp); SOCK_LOCK(so); + already_listening = SOLISTENING(so); error = solisten_proto_check(so); if (error != 0) { SOCK_UNLOCK(so); @@ -390,6 +392,8 @@ tcp_usr_listen(struct socket *so, int backlog, struct thread *td) solisten_proto_abort(so); } SOCK_UNLOCK(so); + if (already_listening) + goto out; if (error == 0) in_pcblisten(inp); @@ -408,10 +412,11 @@ out: static int tcp6_usr_listen(struct socket *so, int backlog, struct thread *td) { - int error = 0; struct inpcb *inp; struct tcpcb *tp; u_char vflagsav; + int error = 0; + bool already_listening; inp = sotoinpcb(so); KASSERT(inp != NULL, ("tcp6_usr_listen: inp == NULL")); @@ -425,6 +430,7 @@ tcp6_usr_listen(struct socket *so, int backlog, struct thread *td) vflagsav = inp->inp_vflag; SOCK_LOCK(so); + already_listening = SOLISTENING(so); error = solisten_proto_check(so); if (error != 0) { SOCK_UNLOCK(so); @@ -449,6 +455,8 @@ tcp6_usr_listen(struct socket *so, int backlog, struct thread *td) solisten_proto_abort(so); } SOCK_UNLOCK(so); + if (already_listening) + goto out; if (error == 0) in_pcblisten(inp);