From a0aa3373c705480bed5d840c57bef9f7d1c806e7 Mon Sep 17 00:00:00 2001 From: Jeet Dekivadia Date: Sat, 30 May 2026 02:17:05 -0700 Subject: [PATCH] Open attached executables through procfs Signed-off-by: Jeet Dekivadia --- src/elf.ml | 9 ++++++++- src/trace.ml | 2 +- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/elf.ml b/src/elf.ml index aeaf0c62c..055776c1e 100644 --- a/src/elf.ml +++ b/src/elf.ml @@ -302,7 +302,14 @@ let all_file_selections t symbol = ;; let selection_stop_info t pid selection = - let filename = Filename_unix.realpath t.filename in + (* Keep procfs executable symlinks openable across mount namespaces, but compare + against the target path exposed in [/proc/$pid/maps]. *) + let filename = + if String.is_prefix t.filename ~prefix:"/proc/" + && String.is_suffix t.filename ~suffix:"/exe" + then Core_unix.readlink t.filename + else Filename_unix.realpath t.filename + in let compute_addr addr = if t.statically_mappable then addr diff --git a/src/trace.ml b/src/trace.ml index 4d0004703..513ab2858 100644 --- a/src/trace.ml +++ b/src/trace.ml @@ -747,7 +747,7 @@ module Make_commands (Backend : Backend_intf.S) = struct trigger can be passed currently. *) let executable = List.hd_exn pids - |> fun pid -> Core_unix.readlink [%string "/proc/%{pid#Pid}/exe"] + |> fun pid -> [%string "/proc/%{pid#Pid}/exe"] in record_opt_fn ~executable ~f:(fun opts -> let { Record_opts.executable; when_to_snapshot; collection_mode; _ } =