]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Bug 480706 - Unhandled syscall 325 (mlock2)
authorPaul Floyd <pjfloyd@wanadoo.fr>
Mon, 5 Feb 2024 21:14:33 +0000 (22:14 +0100)
committerPaul Floyd <pjfloyd@wanadoo.fr>
Tue, 6 Feb 2024 06:53:54 +0000 (07:53 +0100)
19 files changed:
.gitignore
NEWS
configure.ac
coregrind/m_syswrap/priv_syswrap-generic.h
coregrind/m_syswrap/syswrap-amd64-linux.c
coregrind/m_syswrap/syswrap-arm-linux.c
coregrind/m_syswrap/syswrap-arm64-linux.c
coregrind/m_syswrap/syswrap-generic.c
coregrind/m_syswrap/syswrap-mips32-linux.c
coregrind/m_syswrap/syswrap-mips64-linux.c
coregrind/m_syswrap/syswrap-nanomips-linux.c
coregrind/m_syswrap/syswrap-ppc32-linux.c
coregrind/m_syswrap/syswrap-ppc64-linux.c
coregrind/m_syswrap/syswrap-s390x-linux.c
coregrind/m_syswrap/syswrap-x86-linux.c
memcheck/tests/linux/Makefile.am
memcheck/tests/linux/bug480706.c [new file with mode: 0644]
memcheck/tests/linux/bug480706.stderr.exp [new file with mode: 0644]
memcheck/tests/linux/bug480706.vgtest [new file with mode: 0644]

index c874f10070faf3582cbe38519295ba7ff04ebe71..3e79a20e08d32b43220f5c5a3e25146db526cdce 100644 (file)
 /memcheck/tests/linux/.deps
 /memcheck/tests/linux/aligned_alloc
 /memcheck/tests/linux/brk
+/memcheck/tests/linux/bug480706
 /memcheck/tests/linux/capget
 /memcheck/tests/linux/check_preadv2_pwritev2
 /memcheck/tests/linux/dlclose_leak
diff --git a/NEWS b/NEWS
index e26a226945bbd79ec47d451f50e2c486994c7c92..a902488af71687c5db33d1ffe0b6590d1021fc08 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -37,7 +37,8 @@ are not entered into bugzilla tend to get forgotten about or ignored.
 476331  clean up generated/distributed filter scripts
 476535  Difference in allocation size for massif/tests/overloaded-new between
         clang++/libc++ and g++/libstdc++
-476548  valgrind 3.22.0 fails on assertion when loading debuginfo file produced by mold
+476548  valgrind 3.22.0 fails on assertion when loading debuginfo file
+        produced by mold
 476708  valgrind-monitor.py regular expressions should use raw strings
 476780  Extend strlcat and strlcpy wrappers to GNU libc
 476787  Build of Valgrind 3.21.0 fails when SOLARIS_PT_SUNDWTRACE_THRP is
@@ -57,6 +58,7 @@ are not entered into bugzilla tend to get forgotten about or ignored.
 480405  valgrind 3.22.0 "m_debuginfo/image.c:586 (set_CEnt):
         Assertion '!sr_isError(sr)' failed."
 480488  Add support for FreeBSD 13.3
+480706  Unhandled syscall 325 (mlock2)
 n-i-bz  Add redirect for memccpy
 
 To see details of a given bug, visit
index 95f9ed4482e9ae02c93f0d01af02f59dfbbf0541..207648f34072022fb62ccc1c267936988ff856ca 100755 (executable)
@@ -5401,6 +5401,26 @@ AC_LINK_IFELSE([AC_LANG_PROGRAM([[
 AM_CONDITIONAL([HAVE_OPENAT2],
                [test x$ac_have_openat2 = xyes])
 
+# check for crypto
+
+safe_LIBS="$LIBS"
+LIBS="-lcrypto"
+AC_MSG_CHECKING([if platform has openssl crypto])
+
+AC_LINK_IFELSE([AC_LANG_PROGRAM([[
+  #include <openssl/crypto.h>
+]], [[
+  CRYPTO_secure_malloc_init(1<<20, 8);
+]])], [
+  ac_have_openssl=yes
+], [
+  ac_have_openssl=no
+])
+LIBS=$safe_LIBS
+
+AM_CONDITIONAL([HAVE_OPENSSL],
+               [test x$ac_have_openssl = xyes])
+
 # does g++ have built-in functions for atomic memory access ?
 AC_MSG_CHECKING([if g++ supports __sync_add_and_fetch])
 
index 41d1bb8f2cbc0c9a583dcdd8e874b2b2dd408790..6c3cd26d4bc530c023c5662dcfb2f364e3f2bd9d 100644 (file)
@@ -260,6 +260,7 @@ DECL_TEMPLATE(generic, sys_mincore);               // * L?
 DECL_TEMPLATE(generic, sys_getdents64);            // * (SVr4,SVID?)
 DECL_TEMPLATE(generic, sys_statfs64);              // * (?)
 DECL_TEMPLATE(generic, sys_fstatfs64);             // * (?)
+DECL_TEMPLATE(generic, sys_mlock2);                // * L
 
 
 /* ---------------------------------------------------------------------
index d93d937211fcf71c6860a872d5697ce770705833..0b751f96d4a98282cf1aef94c53b1ecbd376af02 100644 (file)
@@ -842,20 +842,22 @@ static SyscallTableEntry syscall_table[] = {
    LINX_(__NR_setns,             sys_setns),            // 308
    LINXY(__NR_getcpu,            sys_getcpu),           // 309
 
-   LINXY(__NR_process_vm_readv,  sys_process_vm_readv), // 310
-   LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 311
-   LINX_(__NR_kcmp,              sys_kcmp),             // 312
-   LINX_(__NR_finit_module,      sys_finit_module),     // 313
-   LINX_(__NR_sched_setattr,     sys_sched_setattr),    // 314
-   LINXY(__NR_sched_getattr,     sys_sched_getattr),    // 315
-   LINX_(__NR_renameat2,         sys_renameat2),        // 316
-//   LIN__(__NR_seccomp,           sys_ni_syscall),       // 317
-   LINXY(__NR_getrandom,         sys_getrandom),        // 318
-   LINXY(__NR_memfd_create,      sys_memfd_create),     // 319
-
-//   LIN__(__NR_kexec_file_load,   sys_ni_syscall),       // 320
-   LINXY(__NR_bpf,               sys_bpf),              // 321
-   LINX_(__NR_execveat,          sys_execveat),         // 322
+   LINXY(__NR_process_vm_readv,  sys_process_vm_readv),  // 310
+   LINX_(__NR_process_vm_writev, sys_process_vm_writev), // 311
+   LINX_(__NR_kcmp,              sys_kcmp),              // 312
+   LINX_(__NR_finit_module,      sys_finit_module),      // 313
+   LINX_(__NR_sched_setattr,     sys_sched_setattr),     // 314
+   LINXY(__NR_sched_getattr,     sys_sched_getattr),     // 315
+   LINX_(__NR_renameat2,         sys_renameat2),         // 316
+//   LIN__(__NR_seccomp,           sys_ni_syscall),      // 317
+   LINXY(__NR_getrandom,         sys_getrandom),         // 318
+   LINXY(__NR_memfd_create,      sys_memfd_create),      // 319
+
+//   LIN__(__NR_kexec_file_load,   sys_ni_syscall),      // 320
+   LINXY(__NR_bpf,               sys_bpf),               // 321
+   LINX_(__NR_execveat,          sys_execveat),          // 322
+
+   GENX_(__NR_mlock2,            sys_mlock2),            // 325
 
    LINXY(__NR_preadv2,           sys_preadv2),           // 327
    LINX_(__NR_pwritev2,          sys_pwritev2),          // 328
index 21fc066d6d678fe78553cfd846d9da9b399b66e7..ea79c9ba6fba3fe9f2684af655bbb74766c80df7 100644 (file)
@@ -1019,6 +1019,7 @@ static SyscallTableEntry syscall_main_table[] = {
    LINX_(__NR_execveat,          sys_execveat),         // 387
 
    LINX_(__NR_membarrier,        sys_membarrier),       // 389
+   GENX_(__NR_mlock2,            sys_mlock2),           // 390
    LINX_(__NR_copy_file_range,   sys_copy_file_range),  // 391
    LINXY(__NR_preadv2,           sys_preadv2),          // 392
    LINX_(__NR_pwritev2,          sys_pwritev2),         // 393
index 5a24dcaf390cd016780cae7c8da3b9190b4e4971..61bb4f2d5d87f006540855c47c5e744699e38cbf 100644 (file)
@@ -816,7 +816,7 @@ static SyscallTableEntry syscall_main_table[] = {
    LINX_(__NR_execveat,          sys_execveat),          // 281
    //   (__NR_userfaultfd,       sys_ni_syscall),        // 282
    LINX_(__NR_membarrier,        sys_membarrier),        // 283
-   //   (__NR_mlock2,            sys_ni_syscall),        // 284
+   GENX_(__NR_mlock2,            sys_mlock2),            // 284
    LINX_(__NR_copy_file_range,   sys_copy_file_range),   // 285
    LINXY(__NR_preadv2,           sys_preadv2),           // 286
    LINX_(__NR_pwritev2,          sys_pwritev2),          // 287
index 4bb21ca73b7ac701942104d1506f694a94b51a02..d5159e7900d50977fe99a87d8744c0832744abf1 100644 (file)
@@ -2738,6 +2738,13 @@ PRE(sys_nice)
    PRE_REG_READ1(long, "nice", int, inc);
 }
 
+PRE(sys_mlock2)
+{
+   *flags |= SfMayBlock;
+   PRINT("sys_mlock2 ( %#" FMT_REGWORD "x, %" FMT_REGWORD "u, %" FMT_REGWORD "u )", ARG1, ARG2, ARG3);
+   PRE_REG_READ2(int, "mlock2", void*, addr, vki_size_t, len);
+}
+
 PRE(sys_mlock)
 {
    *flags |= SfMayBlock;
index ba0a4538795daf399bf0f9c30ba2a04962d3e2ee..5f7e2603ffc343409ca732f147babfbfa3be5611 100644 (file)
@@ -1104,7 +1104,7 @@ static SyscallTableEntry syscall_main_table[] = {
    LINX_ (__NR_execveat,               sys_execveat),                // 356
    //..
    LINX_ (__NR_membarrier,             sys_membarrier),              // 358
-   //..
+   GENX_ (__NR_mlock2,                 sys_mlock2),                  // 359
    LINX_ (__NR_copy_file_range,        sys_copy_file_range),         // 360
    LINXY (__NR_preadv2,                sys_preadv2),                 // 361
    LINX_ (__NR_pwritev2,               sys_pwritev2),                // 362
index ead350719dd27459ae499cd1b7205d6d6f9c70d7..f9af1300ddeae8c3930f5cb1ac5da55cbc626400 100644 (file)
@@ -805,6 +805,7 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY (__NR_memfd_create, sys_memfd_create),
    LINX_ (__NR_execveat, sys_execveat),
    LINX_ (__NR_membarrier, sys_membarrier),
+   GENX_ (__NR_mlock2, sys_mlock2),
    LINX_ (__NR_copy_file_range, sys_copy_file_range),
    LINXY (__NR_preadv, sys_preadv),
    LINX_ (__NR_pwritev, sys_pwritev),
index b7eaa24ebc3fcdba418bb3ef9bfa5d413930ba78..34913a25646080238fff329468cc60d6ad878d45 100644 (file)
@@ -814,7 +814,7 @@ static SyscallTableEntry syscall_main_table[] = {
    LINX_ (__NR_execveat,               sys_execveat),
    //    (__NR_userfaultfd,            sys_ni_syscall),
    LINX_ (__NR_membarrier,             sys_membarrier),
-   //    (__NR_mlock2,                 sys_ni_syscall),
+   GENX_ (__NR_mlock2,                 sys_mlock2),
    //    (__NR_copy_file_range,        sys_ni_syscall),
    //    (__NR_preadv2,                sys_ni_syscall),
    //    (__NR_pwritev2,               sys_ni_syscall),
index 7cb022131480c4a73e18a2f633f63a252ac5149d..b57aa44d62db2224a5c48ba9f070bd80c6bf2abf 100644 (file)
@@ -1025,6 +1025,7 @@ static SyscallTableEntry syscall_table[] = {
 
    LINX_ (__NR_execveat,         sys_execveat),         // 362
 
+   GENX_(__NR_mlock2,            sys_mlock2).           // 378
    LINX_(__NR_copy_file_range,   sys_copy_file_range),  // 379
    LINX_(__NR_preadv2,           sys_preadv2),          // 380
    LINX_(__NR_pwritev2,          sys_pwritev2),         // 381
index bd7fbb2c5a1ec4566d270b0e63285d75eb6a703c..aeffbe0724aa29a92fa764fccfb751831a2e2207 100644 (file)
@@ -1013,6 +1013,7 @@ static SyscallTableEntry syscall_table[] = {
 
    LINX_(__NR_membarrier,        sys_membarrier),       // 365
 
+   GENX_(__NR_mlock2,            sys_mlock2),           // 378
    LINX_(__NR_copy_file_range,   sys_copy_file_range),  // 379
    LINX_(__NR_preadv2,           sys_preadv2),          // 380
    LINX_(__NR_pwritev2,          sys_pwritev2),         // 381
index 4f03f218eb515416ab4eb560145b48f1378039a5..b720f62d063fd5f50ab36e6dbc4add3a4fc8bdb7 100644 (file)
@@ -853,7 +853,7 @@ static SyscallTableEntry syscall_table[] = {
    LINXY(__NR_recvfrom, sys_recvfrom),                                // 371
    LINXY(__NR_recvmsg, sys_recvmsg),                                  // 372
    LINX_(__NR_shutdown, sys_shutdown),                                // 373
-
+   GENX_(__NR_mlock2, sys_mlock2),                                    // 374
    LINX_(__NR_copy_file_range, sys_copy_file_range),                  // 375
    LINXY(__NR_preadv2, sys_preadv2),                                  // 376
    LINX_(__NR_pwritev2, sys_pwritev2),                                // 377
index f57b5395cae327e092470e4627fe2cbf7404ffc6..9afd03695b97b8cc2a7feb76940d5829293eeaf3 100644 (file)
@@ -1553,7 +1553,7 @@ static SyscallTableEntry syscall_table[] = {
    LINXY(__NR_timerfd_gettime,   sys_timerfd_gettime),  // 326
    LINXY(__NR_signalfd4,         sys_signalfd4),        // 327
    LINXY(__NR_eventfd2,          sys_eventfd2),         // 328
-   LINXY(__NR_epoll_create1,     sys_epoll_create1),     // 329
+   LINXY(__NR_epoll_create1,     sys_epoll_create1),    // 329
 
    LINXY(__NR_dup3,              sys_dup3),             // 330
    LINXY(__NR_pipe2,             sys_pipe2),            // 331
@@ -1579,15 +1579,15 @@ static SyscallTableEntry syscall_table[] = {
    LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 348
    LINX_(__NR_kcmp,              sys_kcmp),             // 349
 
-//   LIN__(__NR_finit_module,      sys_ni_syscall),       // 350
+//   LIN__(__NR_finit_module,      sys_ni_syscall),     // 350
    LINX_(__NR_sched_setattr,     sys_sched_setattr),    // 351
    LINXY(__NR_sched_getattr,     sys_sched_getattr),    // 352
    LINX_(__NR_renameat2,         sys_renameat2),        // 353
-//   LIN__(__NR_seccomp,           sys_ni_syscall),       // 354
+//   LIN__(__NR_seccomp,           sys_ni_syscall),     // 354
 
    LINXY(__NR_getrandom,         sys_getrandom),        // 355
    LINXY(__NR_memfd_create,      sys_memfd_create),     // 356
-//   LIN__(__NR_bpf,               sys_ni_syscall),       // 357
+//   LIN__(__NR_bpf,               sys_ni_syscall),     // 357
    LINX_(__NR_execveat,          sys_execveat),         // 358
    LINXY(__NR_socket,            sys_socket),           // 359
    LINXY(__NR_socketpair,        sys_socketpair),       // 360
@@ -1606,10 +1606,10 @@ static SyscallTableEntry syscall_table[] = {
    LINX_(__NR_shutdown,          sys_shutdown),         // 373
 
    LINX_(__NR_membarrier,        sys_membarrier),       // 375
-
-   LINX_(__NR_copy_file_range,   sys_copy_file_range),   // 377
-   LINXY(__NR_preadv2,           sys_preadv2),           // 378
-   LINX_(__NR_pwritev2,          sys_pwritev2),          // 379
+   GENX_(__NR_mlock2,            sys_mlock2),           // 376
+   LINX_(__NR_copy_file_range,   sys_copy_file_range),  // 377
+   LINXY(__NR_preadv2,           sys_preadv2),          // 378
+   LINX_(__NR_pwritev2,          sys_pwritev2),         // 379
 
    LINXY(__NR_pkey_mprotect,     sys_pkey_mprotect),    // 380
    LINX_(__NR_pkey_alloc,        sys_pkey_alloc),       // 381
index 95508129fcb1ac4260b33873397a93bcc325c41b..9a950d84817b2bcf2582e76410a7d917f0e1eb25 100644 (file)
@@ -8,6 +8,7 @@ EXTRA_DIST = \
                aligned_alloc.stderr.exp-musl \
                aligned_alloc.stderr.exp-glibc238 \
        brk.stderr.exp brk.vgtest \
+       bug480706.stderr.exp bug480706.vgtest \
        capget.vgtest capget.stderr.exp capget.stderr.exp2 capget.stderr.exp3 \
        debuginfod-check.stderr.exp debuginfod-check.vgtest.in \
        debuginfod-check.pl \
@@ -66,6 +67,10 @@ check_PROGRAMS = \
        enomem \
        memalign
 
+if HAVE_OPENSSL
+check_PROGRAMS += bug480706
+endif
+
 if HAVE_AT_FDCWD
 check_PROGRAMS += sys-openat
 endif
@@ -100,10 +105,14 @@ AM_CXXFLAGS += $(AM_FLAG_M3264_PRI)
 stack_switch_LDADD    = -lpthread
 timerfd_syscall_LDADD = -lrt
 
+if HAVE_OPENSSL
+bug480706_LDFLAGS             = ${AM_LDFLAGS} -lcrypto
+endif
+
 # Build shared object for dlclose_leak
-dlclose_leak_so_so_SOURCES = dlclose_leak_so.c
-dlclose_leak_so_so_CFLAGS  = $(AM_CFLAGS) -fpic -g -O0
-dlclose_leak_so_so_LDFLAGS  = -fpic $(AM_FLAG_M3264_PRI) -shared -Wl,-soname \
+dlclose_leak_so_so_SOURCES    = dlclose_leak_so.c
+dlclose_leak_so_so_CFLAGS     = $(AM_CFLAGS) -fpic -g -O0
+dlclose_leak_so_so_LDFLAGS    = -fpic $(AM_FLAG_M3264_PRI) -shared -Wl,-soname \
                               -Wl,dlclose_leak_so.so
 
 dlclose_leak_SOURCES          = dlclose_leak.c
diff --git a/memcheck/tests/linux/bug480706.c b/memcheck/tests/linux/bug480706.c
new file mode 100644 (file)
index 0000000..6290fe0
--- /dev/null
@@ -0,0 +1,8 @@
+#include <openssl/crypto.h>                                                                                                                                       
+
+int main(void)
+{
+    CRYPTO_secure_malloc_init(1<<20, 8);
+    CRYPTO_secure_malloc_done();
+    return 0;
+}
diff --git a/memcheck/tests/linux/bug480706.stderr.exp b/memcheck/tests/linux/bug480706.stderr.exp
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/memcheck/tests/linux/bug480706.vgtest b/memcheck/tests/linux/bug480706.vgtest
new file mode 100644 (file)
index 0000000..4b2a486
--- /dev/null
@@ -0,0 +1,3 @@
+prog: bug480706
+vgopts: -q
+