[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