git: f1430567f26b - main - ddb: add show all tcpcbs
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 28 May 2025 10:29:40 UTC
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