]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
FreeBSD: add file descriptor tracking for _umtx_op
authorPaul Floyd <pjfloyd@wanadoo.fr>
Sat, 14 Sep 2024 18:56:54 +0000 (20:56 +0200)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Sat, 14 Sep 2024 18:56:54 +0000 (20:56 +0200)
UMTX_OP_SHM with a sub request of UMTX_SHM_CREAT creates
an anonymous shared memory object and returns a file
descriptor. This fd is now tracked when required.

.gitignore
coregrind/m_syswrap/syswrap-freebsd.c
include/vki/vki-freebsd.h
none/tests/freebsd/Makefile.am
none/tests/freebsd/filter_fdleak [new symlink]
none/tests/freebsd/umtx_shm_creat.cpp [new file with mode: 0644]
none/tests/freebsd/umtx_shm_creat1.stderr.exp [new file with mode: 0644]
none/tests/freebsd/umtx_shm_creat1.vgtest [new file with mode: 0644]
none/tests/freebsd/umtx_shm_creat2.stderr.exp [new file with mode: 0644]
none/tests/freebsd/umtx_shm_creat2.vgtest [new file with mode: 0644]

index 32d32212afea59ebdd526b60843475d00f985762..bf477a4fa60e54d953203b4a051cdd4055b1ddf5 100644 (file)
 /none/tests/freebsd/fexecve
 /none/tests/freebsd/hello_world
 /none/tests/freebsd/452275
+/none/tests/freebsd/proc_pid_file
 /none/tests/freebsd/sanity_level_thread
 /none/tests/freebsd/usrstack
-/none/tests/freebsd/proc_pid_file
+/none/tests/freebsd/umtx_shm_creat
 
 # /none/tests/x86/
 /none/tests/x86/*.dSYM
index bc792ae5165a65fd97d4d6d1b2dfb723733d4ce0..071e6ab1523607ca5f1a33163eac91a6499e6130 100644 (file)
@@ -4860,6 +4860,11 @@ POST(sys__umtx_op)
       }
       break;
    case VKI_UMTX_OP_SHM:
+      if (SUCCESS && ARG3 == VKI_UMTX_SHM_CREAT) {
+         if (VG_(clo_track_fds))
+            ML_(record_fd_open_nameless) (tid, RES);
+      }
+      break;
    case VKI_UMTX_OP_ROBUST_LISTS:
       break;
 #if (FREEBSD_VERS >= FREEBSD_13_3)
index 1b51e939fa3b7c82e5bb34e6839780e11c5f1d7d..0c93c3e9ada09710a1015e04c3d25adc33306a5a 100644 (file)
@@ -1974,6 +1974,9 @@ struct vki_umtx_robust_lists_params {
 #define VKI_UMTX_OP_SEM2_WAKE       24
 #define VKI_UMTX_OP_SHM             25
 #define VKI_UMTX_OP_ROBUST_LISTS    26
+
+#define VKI_UMTX_SHM_CREAT          0x0001
+
 #if (FREEBSD_VERS >= FREEBSD_13_3)
 #define VKI_UMTX_OP_GET_MIN_TIMEOUT 27
 #define VKI_UMTX_OP_SET_MIN_TIMEOUT 28
index 50c74496f810e2f35270786ba2bb19e7120cb92e..0194dc474ade9f64f8e4978b59fc9ffb02ed2858 100644 (file)
@@ -52,13 +52,17 @@ EXTRA_DIST = \
        swapcontext.stdout.exp \
        umtx_op_timeout.vgtest \
        umtx_op_timeout.stderr.exp \
+       umtx_shm_creat1.vgtest \
+       umtx_shm_creat1.stderr.exp \
+       umtx_shm_creat2.vgtest \
+       umtx_shm_creat2.stderr.exp \
        usrstack.vgtest \
        usrstack.stderr.exp \
        usrstack.stdout.exp
 
 check_PROGRAMS = \
        auxv osrel swapcontext hello_world fexecve 452275 usrstack \
-       proc_pid_file sanity_level_thread
+       proc_pid_file sanity_level_thread umtx_shm_creat
 
 AM_CFLAGS   += $(AM_FLAG_M3264_PRI)
 AM_CXXFLAGS += $(AM_FLAG_M3264_PRI)
@@ -73,3 +77,5 @@ proc_pid_file_SOURCES = proc_pid_file.cpp
 
 sanity_level_thread_SOURCES = sanity_level_thread.cpp
 sanity_level_thread_LDFLAGS = ${AM_LDFLAGS} -pthread
+
+umtx_shm_creat_SOURCES = umtx_shm_creat.cpp
diff --git a/none/tests/freebsd/filter_fdleak b/none/tests/freebsd/filter_fdleak
new file mode 120000 (symlink)
index 0000000..b20dbae
--- /dev/null
@@ -0,0 +1 @@
+../filter_fdleak
\ No newline at end of file
diff --git a/none/tests/freebsd/umtx_shm_creat.cpp b/none/tests/freebsd/umtx_shm_creat.cpp
new file mode 100644 (file)
index 0000000..5af1dc9
--- /dev/null
@@ -0,0 +1,13 @@
+#include <sys/types.h>
+#include <sys/umtx.h>
+#include <unistd.h>
+
+int main(int argc, char** argv)
+{
+   char key[64];
+   int fd = _umtx_op(nullptr, UMTX_OP_SHM, UMTX_SHM_CREAT, key, nullptr);
+   if (1 == argc)
+   {
+      close(fd);
+   }
+}
diff --git a/none/tests/freebsd/umtx_shm_creat1.stderr.exp b/none/tests/freebsd/umtx_shm_creat1.stderr.exp
new file mode 100644 (file)
index 0000000..4e91876
--- /dev/null
@@ -0,0 +1,11 @@
+FILE DESCRIPTORS: 3 open (3 std) at exit.
+Open file descriptor ...: ...
+   <inherited from parent>
+
+Open file descriptor ...: ...
+   <inherited from parent>
+
+Open file descriptor ...: ...
+   <inherited from parent>
+
+
diff --git a/none/tests/freebsd/umtx_shm_creat1.vgtest b/none/tests/freebsd/umtx_shm_creat1.vgtest
new file mode 100644 (file)
index 0000000..d7d4e3b
--- /dev/null
@@ -0,0 +1,4 @@
+prog: umtx_shm_creat 
+vgopts: -q --track-fds=all
+stderr_filter: filter_fdleak
+
diff --git a/none/tests/freebsd/umtx_shm_creat2.stderr.exp b/none/tests/freebsd/umtx_shm_creat2.stderr.exp
new file mode 100644 (file)
index 0000000..4acc5e4
--- /dev/null
@@ -0,0 +1,14 @@
+FILE DESCRIPTORS: 4 open (3 std) at exit.
+Open file descriptor ...:
+   ...
+
+Open file descriptor ...: ...
+   <inherited from parent>
+
+Open file descriptor ...: ...
+   <inherited from parent>
+
+Open file descriptor ...: ...
+   <inherited from parent>
+
+
diff --git a/none/tests/freebsd/umtx_shm_creat2.vgtest b/none/tests/freebsd/umtx_shm_creat2.vgtest
new file mode 100644 (file)
index 0000000..ed1f2f2
--- /dev/null
@@ -0,0 +1,4 @@
+prog: umtx_shm_creat 
+vgopts: -q --track-fds=all
+args: 1
+stderr_filter: filter_fdleak