[DTrace-devel] [PATCH 6/7] tcp: support non-libctf environments
Kris Van Hees
kris.van.hees at oracle.com
Tue Nov 18 16:38:06 UTC 2025
Commit 0fa93b3ac ("tcp: new provider") and commit c08a5fcf2
("tcp provider: support tcp:::accept-established in absence of skb") both
introduced code that uses ctf_func_type_info() without a pre-processor
conditional to also support the case when libctf is not present on the
system.
When libctf is not present, it is assumed that the system is quite old
and therefore is running an older kernel. Use of libdtrace-ctf (which
has been deprecated in favour of libctf) on systems with recent kernels
is not supported and may lead to unexpected results.
Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
libdtrace/dt_prov_tcp.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/libdtrace/dt_prov_tcp.c b/libdtrace/dt_prov_tcp.c
index 44ed2bc9..319a84f9 100644
--- a/libdtrace/dt_prov_tcp.c
+++ b/libdtrace/dt_prov_tcp.c
@@ -262,6 +262,7 @@ static int trampoline(dt_pcb_t *pcb, uint_t exitlbl)
if (strcmp(prp->desc->prb, "accept-established") == 0) {
direction = NET_PROBE_INBOUND;
+#ifdef HAVE_LIBCTF
have_iphdr = 1;
/* on older (5.4) kernels, tcp_init_transfer() only has 2
* args, i.e. no struct skb * third argument.
@@ -279,6 +280,10 @@ static int trampoline(dt_pcb_t *pcb, uint_t exitlbl)
have_skb = 0;
have_iphdr = 0;
}
+#else
+ have_skb = 0;
+ have_iphdr = 0;
+#endif
/* ensure arg1 is BPF_SOCK_OPS_PASSIVE_ESTABLISHED_CB */
emit(dlp, BPF_LOAD(BPF_DW, BPF_REG_6, BPF_REG_7, DMST_ARG(1)));
emit(dlp, BPF_BRANCH_IMM(BPF_JNE, BPF_REG_6,
@@ -305,6 +310,7 @@ static int trampoline(dt_pcb_t *pcb, uint_t exitlbl)
} else {
direction = NET_PROBE_OUTBOUND;
if (strcmp(uprp->desc->fun, "ip_send_unicast_reply") == 0) {
+#ifdef HAVE_LIBCTF
/* Newer kernels pass the original socket as second
* arg to ip_send_unicast_reply(); if that function
* has an extra (> 9) argument we know we have to
@@ -329,6 +335,11 @@ static int trampoline(dt_pcb_t *pcb, uint_t exitlbl)
skbarg = 1;
tcparg = 5;
}
+#else
+ skarg = 0;
+ skbarg = 1;
+ tcparg = 5;
+#endif
have_iphdr = 1;
tcparg = 6;
skarg_maybe_null = 1;
--
2.43.5
More information about the DTrace-devel
mailing list