[DTrace-devel] [PATCH] Forbid setting lockmem value with a pragma

eugene.loh at oracle.com eugene.loh at oracle.com
Thu Dec 14 22:13:38 UTC 2023


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

With commit
5a12c51c983f "options: ensure lockmem is set before retrieving probe info",
lockmem is set early.  Therefore, forbid setting its value in a pragma and
modify the associated test.

Signed-off-by: Eugene Loh <eugene.loh at oracle.com>
---
 libdtrace/dt_options.c                   |  3 +++
 test/unittest/misc/err.lockmem-pragma.r  |  2 ++
 test/unittest/misc/err.lockmem-pragma.sh | 19 +++++++++++++++++
 test/unittest/misc/tst.lockmem-pragma.r  | 23 --------------------
 test/unittest/misc/tst.lockmem-pragma.sh | 27 ------------------------
 test/unittest/misc/tst.lockmem-pragma.x  | 16 --------------
 6 files changed, 24 insertions(+), 66 deletions(-)
 create mode 100644 test/unittest/misc/err.lockmem-pragma.r
 create mode 100755 test/unittest/misc/err.lockmem-pragma.sh
 delete mode 100644 test/unittest/misc/tst.lockmem-pragma.r
 delete mode 100755 test/unittest/misc/tst.lockmem-pragma.sh
 delete mode 100755 test/unittest/misc/tst.lockmem-pragma.x

diff --git a/libdtrace/dt_options.c b/libdtrace/dt_options.c
index 33995a6f..00926882 100644
--- a/libdtrace/dt_options.c
+++ b/libdtrace/dt_options.c
@@ -762,6 +762,9 @@ dt_opt_size(dtrace_hdl_t *dtp, const char *arg, uintptr_t option)
 static int
 dt_opt_lockmem(dtrace_hdl_t *dtp, const char *arg, uintptr_t option)
 {
+	if (dtp->dt_pcb != NULL)
+		return dt_set_errno(dtp, EDT_BADOPTCTX);
+
 	if (arg == NULL)
 		return dt_set_errno(dtp, EDT_BADOPTVAL);
 
diff --git a/test/unittest/misc/err.lockmem-pragma.r b/test/unittest/misc/err.lockmem-pragma.r
new file mode 100644
index 00000000..595ae65e
--- /dev/null
+++ b/test/unittest/misc/err.lockmem-pragma.r
@@ -0,0 +1,2 @@
+-- @@stderr --
+dtrace: failed to compile script /dev/stdin: line 1: failed to set option 'lockmem' to '1': Option cannot be used from within a D program
diff --git a/test/unittest/misc/err.lockmem-pragma.sh b/test/unittest/misc/err.lockmem-pragma.sh
new file mode 100755
index 00000000..0b7bba26
--- /dev/null
+++ b/test/unittest/misc/err.lockmem-pragma.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+#
+# Oracle Linux DTrace.
+# Copyright (c) 2023, 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.
+#
+# @@nosort
+
+dtrace=$1
+
+$dtrace -qs /dev/stdin << EOF
+#pragma D option lockmem=1
+
+BEGIN
+{
+	exit(0);
+}
+EOF
diff --git a/test/unittest/misc/tst.lockmem-pragma.r b/test/unittest/misc/tst.lockmem-pragma.r
deleted file mode 100644
index 29917922..00000000
--- a/test/unittest/misc/tst.lockmem-pragma.r
+++ /dev/null
@@ -1,23 +0,0 @@
-1
-1
-
-             1234
-0
-
-             1234
-0
-
-             1234
-0
-
-             1234
-0
--- @@stderr --
-dtrace: could not enable tracing: failed to create BPF map 'state':
-	The kernel locked-memory limit is possibly too low.  Set a
-	higher limit with the DTrace option '-xlockmem=N'.  Or, use
-	'ulimit -l N' (Kbytes).  Or, make N the string 'unlimited'.
-dtrace: could not enable tracing: failed to create BPF map 'state':
-	The kernel locked-memory limit is possibly too low.  Set a
-	higher limit with the DTrace option '-xlockmem=N'.  Or, use
-	'ulimit -l N' (Kbytes).  Or, make N the string 'unlimited'.
diff --git a/test/unittest/misc/tst.lockmem-pragma.sh b/test/unittest/misc/tst.lockmem-pragma.sh
deleted file mode 100755
index 74d0ed15..00000000
--- a/test/unittest/misc/tst.lockmem-pragma.sh
+++ /dev/null
@@ -1,27 +0,0 @@
-#!/bin/bash
-#
-# Oracle Linux DTrace.
-# Copyright (c) 2022, 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.
-#
-# @@nosort
-
-dtrace=$1
-
-ulimit -l 1
-
-for val in 16 1K 268435456K 262144M 256G unlimited; do
-	$dtrace -qs /dev/stdin << EOF
-		#pragma D option lockmem=$val
-
-		BEGIN
-		{
-			@ = avg(1234);
-			exit(0);
-		}
-EOF
-	echo $?
-done
-
-exit 0
diff --git a/test/unittest/misc/tst.lockmem-pragma.x b/test/unittest/misc/tst.lockmem-pragma.x
deleted file mode 100755
index a779416b..00000000
--- a/test/unittest/misc/tst.lockmem-pragma.x
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/bash
-
-read MAJOR MINOR <<< `uname -r | grep -Eo '^[0-9]+\.[0-9]+' | tr '.' ' '`
-
-if [ $MAJOR -lt 5 ]; then
-        exit 0
-fi
-if [ $MAJOR -eq 5 -a $MINOR -lt 15 ]; then
-        exit 0
-fi
-
-# Somehow, UEKR6 (5.4.17) has problems with the the locked-memory limit,
-# but UEKR7 (5.15.0) does not
-
-echo "no locked-memory limit on newer kernels?"
-exit 1
-- 
2.18.4




More information about the DTrace-devel mailing list