Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 28 May 2025 10:29:40 GMT
From:      Michael Tuexen <tuexen@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: f1430567f26b - main - ddb: add show all tcpcbs
Message-ID:  <202505281029.54SATeWD062970@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by tuexen:

URL: https://cgit.FreeBSD.org/src/commit/?id=f1430567f26bc84db3818914fa91c74507d1602a

commit f1430567f26bc84db3818914fa91c74507d1602a
Author:     Michael Tuexen <tuexen@FreeBSD.org>
AuthorDate: 2025-05-28 10:25:26 +0000
Commit:     Michael Tuexen <tuexen@FreeBSD.org>
CommitDate: 2025-05-28 10:25:26 +0000

    ddb: add show all tcpcbs
    
    Add a command to show all TCP control blocks. Also provide an option
    to limit the output to TCP control blocks, which are locked.
    The plan is to run show all tcpcbs/l when syzkaller triggers a panic.
    If a TCP control block is affected, it is most likely locked and
    therefore the command shows the information of the affected TCP
    control block.
    
    Reviewed by:            markj, thj
    Tested by:              thj
    MFC after:              1 week
    Sponsored by:           Netflix, Inc.
    Differential Revision:  https://reviews.freebsd.org/D50516
---
 share/man/man4/ddb.4     | 10 +++++++++-
 sys/netinet/tcp_usrreq.c | 23 +++++++++++++++++++++++
 2 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/share/man/man4/ddb.4 b/share/man/man4/ddb.4
index 4f6304e88114..9a9af553b29d 100644
--- a/share/man/man4/ddb.4
+++ b/share/man/man4/ddb.4
@@ -24,7 +24,7 @@
 .\" any improvements or extensions that they make and grant Carnegie Mellon
 .\" the rights to redistribute these changes.
 .\"
-.Dd May 24, 2025
+.Dd May 28, 2025
 .Dt DDB 4
 .Os
 .Sh NAME
@@ -604,6 +604,14 @@ The
 modifier will print command line arguments for each process.
 .\"
 .Pp
+.It Ic show Cm all tcpcbs Ns Op Li / Ns Cm l
+Show the same output as "show tcpcb" does, but for all
+TCP control blocks within the system.
+Using the
+.Cm l
+modifier will limit the output to TCP control blocks, which are locked.
+.\"
+.Pp
 .It Ic show Cm all trace
 .It Ic alltrace
 Show a stack trace for every thread in the system.
diff --git a/sys/netinet/tcp_usrreq.c b/sys/netinet/tcp_usrreq.c
index 5be4c399893a..a7a1d98fd193 100644
--- a/sys/netinet/tcp_usrreq.c
+++ b/sys/netinet/tcp_usrreq.c
@@ -3222,4 +3222,27 @@ DB_SHOW_COMMAND(tcpcb, db_show_tcpcb)
 
 	db_print_tcpcb(tp, "tcpcb", 0);
 }
+
+DB_SHOW_ALL_COMMAND(tcpcbs, db_show_all_tcpcbs)
+{
+	VNET_ITERATOR_DECL(vnet_iter);
+	struct inpcb *inp;
+	bool only_locked;
+
+	only_locked = strchr(modif, 'l') != NULL;
+	VNET_FOREACH(vnet_iter) {
+		CURVNET_SET(vnet_iter);
+		CK_LIST_FOREACH(inp, &V_tcbinfo.ipi_listhead, inp_list) {
+			if (only_locked &&
+			    inp->inp_lock.rw_lock == RW_UNLOCKED)
+				continue;
+			db_print_tcpcb(intotcpcb(inp), "tcpcb", 0);
+			if (db_pager_quit)
+				break;
+		}
+		CURVNET_RESTORE();
+		if (db_pager_quit)
+			break;
+	}
+}
 #endif



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202505281029.54SATeWD062970>