[DTrace-devel] [PATCH 4/4] test: Skip D return() action if kernel not configured right

eugene.loh at oracle.com eugene.loh at oracle.com
Mon Oct 6 21:57:26 UTC 2025


From: Eugene Loh <eugene.loh at oracle.com>

Most of the err.* tests can still be run, since they test other
failure modes.

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
 .../unittest/actions/return/err.destructive.x |  1 +
 .../unittest/actions/return/tst.destructive.x | 67 +++++++++++++++++++
 .../return/tst.override-getpid-entry.x        |  1 +
 .../return/tst.override-getpid-return.x       |  1 +
 4 files changed, 70 insertions(+)
 create mode 120000 test/unittest/actions/return/err.destructive.x
 create mode 100755 test/unittest/actions/return/tst.destructive.x
 create mode 120000 test/unittest/actions/return/tst.override-getpid-entry.x
 create mode 120000 test/unittest/actions/return/tst.override-getpid-return.x

diff --git a/test/unittest/actions/return/err.destructive.x b/test/unittest/actions/return/err.destructive.x
new file mode 120000
index 000000000..2cb5b1159
--- /dev/null
+++ b/test/unittest/actions/return/err.destructive.x
@@ -0,0 +1 @@
+tst.destructive.s
\ No newline at end of file
diff --git a/test/unittest/actions/return/tst.destructive.x b/test/unittest/actions/return/tst.destructive.x
new file mode 100755
index 000000000..d54bbb2fa
--- /dev/null
+++ b/test/unittest/actions/return/tst.destructive.x
@@ -0,0 +1,67 @@
+#!/bin/bash
+#
+# Oracle Linux DTrace.
+# Copyright (c) 2025, Oracle and/or its affiliates. All rights reserved.
+# Licensed under the Universal Permissive License v 1.0 as shown at
+# http://oss.oracle.com/licenses/upl.
+
+# For us to use the return() action, the kernel needs to be configured
+# properly.  In /usr/include/linux/bpf.h, we see that bpf_override_return()
+# needs both CONFIG_BPF_KPROBE_OVERRIDE and CONFIG_FUNCTION_ERROR_INJECTION.
+
+# To check kernel configuration parameters, check
+# https://docs.rockylinux.org/10/gemstones/core/view_kernel_conf/
+
+# Look for a file with kernel configuration parameters.
+
+file=""
+for x in \
+    /boot/config-$(uname -r) \
+    /lib/modules/$(uname -r)/config \
+    /lib/modules/$(uname -r)/build/.config \
+    /usr/src/kernels/$(uname -r)/.config \
+; do
+	if [ -e $x ]; then
+		file=$x
+	fi
+done
+
+# If such a file is found, look for the necessary parameters.
+
+if [ $file != "" ]; then
+	if ! grep -q CONFIG_BPF_KPROBE_OVERRIDE=y      $file; then
+		echo need CONFIG_BPF_KPROBE_OVERRIDE=y for D return action, not found in $file
+		exit 2
+	fi
+	if ! grep -q CONFIG_FUNCTION_ERROR_INJECTION=y $file; then
+		echo need CONFIG_FUNCTION_ERROR_INJECTION=y for D return action, not found in $file
+		exit 2
+	fi
+
+	exit 0
+fi
+
+# Some distributions, like Gentoo and Arch, use the configs kernel module to provide
+# /proc/config.gz by default instead.
+
+if [ -e /proc/config.gz ]; then
+	echo try gentoo
+   #    zcat /proc/config.gz | grep -i <keyword>
+   #    zgrep <keyword> /proc/config.gz
+	if ! zgrep -q CONFIG_BPF_KPROBE_OVERRIDE=y           /proc/config.gz; then
+		echo need CONFIG_BPF_KPROBE_OVERRIDE=y for D return action
+		exit 2
+	fi
+	if ! zgrep -q grep CONFIG_FUNCTION_ERROR_INJECTION=y /proc/config.gz; then
+		echo need CONFIG_FUNCTION_ERROR_INJECTION=y for D return action
+		exit 2
+	fi
+
+	exit 0
+fi
+
+
+# We cannot figure out the kernel configuration parameters.
+# Go ahead, run the test, and hope for the best.
+
+exit 0
diff --git a/test/unittest/actions/return/tst.override-getpid-entry.x b/test/unittest/actions/return/tst.override-getpid-entry.x
new file mode 120000
index 000000000..36e160027
--- /dev/null
+++ b/test/unittest/actions/return/tst.override-getpid-entry.x
@@ -0,0 +1 @@
+tst.destructive.x
\ No newline at end of file
diff --git a/test/unittest/actions/return/tst.override-getpid-return.x b/test/unittest/actions/return/tst.override-getpid-return.x
new file mode 120000
index 000000000..36e160027
--- /dev/null
+++ b/test/unittest/actions/return/tst.override-getpid-return.x
@@ -0,0 +1 @@
+tst.destructive.x
\ No newline at end of file
-- 
2.47.3




More information about the DTrace-devel mailing list