[DTrace-devel] [PATCH REVIEWED 02/04] options: ensure lockmem is set before retrieving probe info

Kris Van Hees kris.van.hees at oracle.com
Thu Nov 30 15:59:04 UTC 2023


The rawtp provider uses trial-and-error BPF program loading to determine
the number of arguments for a raw tracepoint.  That requires the lockmem
option value to be applied before probe info is retrieved.

Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
---
 libdtrace/dt_open.c | 13 ++++++++++++-
 libdtrace/dt_work.c | 10 ----------
 2 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/libdtrace/dt_open.c b/libdtrace/dt_open.c
index b521d887..d47acb74 100644
--- a/libdtrace/dt_open.c
+++ b/libdtrace/dt_open.c
@@ -1173,13 +1173,24 @@ dtrace_vopen(int version, int flags, int *errp,
 int
 dtrace_init(dtrace_hdl_t *dtp)
 {
-	int	i;
+	int		i;
+	dtrace_optval_t	lockmem = dtp->dt_options[DTRACEOPT_LOCKMEM];
 
 	/*
 	 * Initialize the BPF library handling.
 	 */
 	dt_dlib_init(dtp);
 
+	/*
+	 * Set the locked-memory limit if so directed by the user.
+	 */
+        if (lockmem != DTRACEOPT_UNSET) {
+		struct rlimit	rl;
+
+		rl.rlim_cur = rl.rlim_max = lockmem;
+		setrlimit(RLIMIT_MEMLOCK, &rl);
+        }
+
 	/*
 	 * Initialize consume handling.
 	 */
diff --git a/libdtrace/dt_work.c b/libdtrace/dt_work.c
index 1bb6104c..fe88a48e 100644
--- a/libdtrace/dt_work.c
+++ b/libdtrace/dt_work.c
@@ -136,20 +136,10 @@ dtrace_go(dtrace_hdl_t *dtp, uint_t cflags)
 {
 	size_t			size;
 	struct epoll_event	ev;
-	dtrace_optval_t		lockmem = dtp->dt_options[DTRACEOPT_LOCKMEM];
-	struct rlimit		rl;
 
 	if (dtp->dt_active)
 		return dt_set_errno(dtp, EINVAL);
 
-	/*
-	 * Set the locked-memory limit if so directed by the user.
-	 */
-        if (lockmem != DTRACEOPT_UNSET) {
-                rl.rlim_cur = rl.rlim_max = lockmem;
-                setrlimit(RLIMIT_MEMLOCK, &rl);
-        }
-
 	/* Create the BPF programs. */
 	if (dt_bpf_make_progs(dtp, cflags) == -1)
 		return -1;
-- 
2.42.0




More information about the DTrace-devel mailing list