From: Paul Floyd Date: Sat, 14 Sep 2024 18:56:54 +0000 (+0200) Subject: FreeBSD: add file descriptor tracking for _umtx_op X-Git-Tag: VALGRIND_3_24_0~66 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b8517dec59aa67a0a6729568d9b65808f4bee93b;p=thirdparty%2Fvalgrind.git FreeBSD: add file descriptor tracking for _umtx_op 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. --- diff --git a/.gitignore b/.gitignore index 32d32212a..bf477a4fa 100644 --- a/.gitignore +++ b/.gitignore @@ -2251,9 +2251,10 @@ /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 diff --git a/coregrind/m_syswrap/syswrap-freebsd.c b/coregrind/m_syswrap/syswrap-freebsd.c index bc792ae51..071e6ab15 100644 --- a/coregrind/m_syswrap/syswrap-freebsd.c +++ b/coregrind/m_syswrap/syswrap-freebsd.c @@ -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) diff --git a/include/vki/vki-freebsd.h b/include/vki/vki-freebsd.h index 1b51e939f..0c93c3e9a 100644 --- a/include/vki/vki-freebsd.h +++ b/include/vki/vki-freebsd.h @@ -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 diff --git a/none/tests/freebsd/Makefile.am b/none/tests/freebsd/Makefile.am index 50c74496f..0194dc474 100644 --- a/none/tests/freebsd/Makefile.am +++ b/none/tests/freebsd/Makefile.am @@ -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 index 000000000..b20dbae98 --- /dev/null +++ b/none/tests/freebsd/filter_fdleak @@ -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 index 000000000..5af1dc94d --- /dev/null +++ b/none/tests/freebsd/umtx_shm_creat.cpp @@ -0,0 +1,13 @@ +#include +#include +#include + +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 index 000000000..4e918760f --- /dev/null +++ b/none/tests/freebsd/umtx_shm_creat1.stderr.exp @@ -0,0 +1,11 @@ +FILE DESCRIPTORS: 3 open (3 std) at exit. +Open file descriptor ...: ... + + +Open file descriptor ...: ... + + +Open file descriptor ...: ... + + + diff --git a/none/tests/freebsd/umtx_shm_creat1.vgtest b/none/tests/freebsd/umtx_shm_creat1.vgtest new file mode 100644 index 000000000..d7d4e3b87 --- /dev/null +++ b/none/tests/freebsd/umtx_shm_creat1.vgtest @@ -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 index 000000000..4acc5e412 --- /dev/null +++ b/none/tests/freebsd/umtx_shm_creat2.stderr.exp @@ -0,0 +1,14 @@ +FILE DESCRIPTORS: 4 open (3 std) at exit. +Open file descriptor ...: + ... + +Open file descriptor ...: ... + + +Open file descriptor ...: ... + + +Open file descriptor ...: ... + + + diff --git a/none/tests/freebsd/umtx_shm_creat2.vgtest b/none/tests/freebsd/umtx_shm_creat2.vgtest new file mode 100644 index 000000000..ed1f2f21c --- /dev/null +++ b/none/tests/freebsd/umtx_shm_creat2.vgtest @@ -0,0 +1,4 @@ +prog: umtx_shm_creat +vgopts: -q --track-fds=all +args: 1 +stderr_filter: filter_fdleak