[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