[DTrace-devel] [PATCH v4] test: account for member name change in mm_struct

Kris Van Hees kris.van.hees at oracle.com
Tue Feb 10 19:06:49 UTC 2026


The flexible array at the end of the mm_struct has changed name in newer
kernels.  Rather than depending on a particular name, we can simply get
the name of the last member (since that is there the flexible array is
always found) and try to use that.

The testsuite gains a dependency on bpftool for this test.

Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
 dtrace.spec                                   |  2 +-
 .../arrays/tst.ctf-dynsized-bounds-runtime.d  | 25 -----------
 .../arrays/tst.ctf-dynsized-bounds-runtime.sh | 42 +++++++++++++++++++
 3 files changed, 43 insertions(+), 26 deletions(-)
 delete mode 100644 test/unittest/arrays/tst.ctf-dynsized-bounds-runtime.d
 create mode 100755 test/unittest/arrays/tst.ctf-dynsized-bounds-runtime.sh

diff --git a/dtrace.spec b/dtrace.spec
index d6af5a80..e0d832ac 100644
--- a/dtrace.spec
+++ b/dtrace.spec
@@ -115,7 +115,7 @@ Requires:     %{name}-devel = %{version}-%{release} perl gcc java
 Requires:     java-devel perl-IO-Socket-IP perl-Net-Ping xfsprogs
 Requires:     exportfs vim-minimal %{name}%{?_isa} = %{version}-%{release}
 Requires:     coreutils wireshark %{glibc32}
-Requires:     time bc nfs-utils
+Requires:     time bc nfs-utils bpftool
 Suggests:     kernel-uek-tools
 Autoreq:      0
 Group:	      Development/System
diff --git a/test/unittest/arrays/tst.ctf-dynsized-bounds-runtime.d b/test/unittest/arrays/tst.ctf-dynsized-bounds-runtime.d
deleted file mode 100644
index f3801454..00000000
--- a/test/unittest/arrays/tst.ctf-dynsized-bounds-runtime.d
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Oracle Linux DTrace.
- * Copyright (c) 2023, 2024, 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.
- */
-
-/*
- * ASSERTION: Array accesses work for CTF-declared arrays of dynamic size
- *	      (ensuring the bounds checking is also bypassed at runtime).
- *
- * SECTION: Pointers and Arrays/Array Declarations and Storage
- */
-
-BEGIN
-{
-	i = pid - pid;			/* Non-constant 0 value. */
-	trace(curthread->mm->cpu_bitmap[i]);
-	exit(0);
-}
-
-ERROR
-{
-	exit(1);
-}
diff --git a/test/unittest/arrays/tst.ctf-dynsized-bounds-runtime.sh b/test/unittest/arrays/tst.ctf-dynsized-bounds-runtime.sh
new file mode 100755
index 00000000..b95e51db
--- /dev/null
+++ b/test/unittest/arrays/tst.ctf-dynsized-bounds-runtime.sh
@@ -0,0 +1,42 @@
+#!/bin/bash
+#
+# Oracle Linux DTrace.
+# Copyright (c) 2023, 2026, 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.
+
+# ASSERTION: Array accesses work for CTF-declared arrays of dynamic size
+#            (ensuring the bounds checking is also bypassed at runtime).
+#
+# SECTION: Pointers and Arrays/Array Declarations and Storage
+
+dtrace=$1
+
+# The mm_struct 'cpu_bitmap' was renamed to 'flexible_array', so we need to
+# see which member name the current kernel uses.  Since it is always the last
+# member of mm_struct, we just use that member name, and hope for the best.
+# If mm_struct ever gets changed to not have a flexible array at its end, this
+# test will need a new structure to work with.
+
+# Determine the member name we should use.
+member=`bpftool btf dump id 1 | \
+		awk '/^\[[0-9]+\] STRUCT \047mm_struct\047/ { in_mm = 1; next; }
+		     /^\t/ && in_mm { fld = $1; gsub(/\047/, "", fld); next }
+		     /^\[[0-9]+\] [_A-Z]+ \047/ && in_mm { print fld; exit; }'`
+
+
+# Try to access the flexible array.
+$dtrace $dt_flags -qn "
+BEGIN
+{
+	i = pid - pid;			/* non-constant 0 value */
+	v = curthread->mm->$member[i];
+	exit(0);
+}
+
+ERROR
+{
+	exit(1);
+}"
+
+echo $?
-- 
2.51.0




More information about the DTrace-devel mailing list