From: Paul Floyd Date: Mon, 5 Feb 2024 21:14:33 +0000 (+0100) Subject: Bug 480706 - Unhandled syscall 325 (mlock2) X-Git-Tag: VALGRIND_3_23_0~186 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=44f14e1533110d7fba1b7f3881f1de425aeb09fc;p=thirdparty%2Fvalgrind.git Bug 480706 - Unhandled syscall 325 (mlock2) --- diff --git a/.gitignore b/.gitignore index c874f10070..3e79a20e08 100644 --- a/.gitignore +++ b/.gitignore @@ -1137,6 +1137,7 @@ /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 e26a226945..a902488af7 100644 --- 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 diff --git a/configure.ac b/configure.ac index 95f9ed4482..207648f340 100755 --- a/configure.ac +++ b/configure.ac @@ -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 +]], [[ + 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]) diff --git a/coregrind/m_syswrap/priv_syswrap-generic.h b/coregrind/m_syswrap/priv_syswrap-generic.h index 41d1bb8f2c..6c3cd26d4b 100644 --- a/coregrind/m_syswrap/priv_syswrap-generic.h +++ b/coregrind/m_syswrap/priv_syswrap-generic.h @@ -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 /* --------------------------------------------------------------------- diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index d93d937211..0b751f96d4 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c index 21fc066d6d..ea79c9ba6f 100644 --- a/coregrind/m_syswrap/syswrap-arm-linux.c +++ b/coregrind/m_syswrap/syswrap-arm-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c index 5a24dcaf39..61bb4f2d5d 100644 --- a/coregrind/m_syswrap/syswrap-arm64-linux.c +++ b/coregrind/m_syswrap/syswrap-arm64-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-generic.c b/coregrind/m_syswrap/syswrap-generic.c index 4bb21ca73b..d5159e7900 100644 --- a/coregrind/m_syswrap/syswrap-generic.c +++ b/coregrind/m_syswrap/syswrap-generic.c @@ -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; diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c index ba0a453879..5f7e2603ff 100644 --- a/coregrind/m_syswrap/syswrap-mips32-linux.c +++ b/coregrind/m_syswrap/syswrap-mips32-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c index ead350719d..f9af1300dd 100644 --- a/coregrind/m_syswrap/syswrap-mips64-linux.c +++ b/coregrind/m_syswrap/syswrap-mips64-linux.c @@ -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), diff --git a/coregrind/m_syswrap/syswrap-nanomips-linux.c b/coregrind/m_syswrap/syswrap-nanomips-linux.c index b7eaa24ebc..34913a2564 100644 --- a/coregrind/m_syswrap/syswrap-nanomips-linux.c +++ b/coregrind/m_syswrap/syswrap-nanomips-linux.c @@ -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), diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c index 7cb0221314..b57aa44d62 100644 --- a/coregrind/m_syswrap/syswrap-ppc32-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c index bd7fbb2c5a..aeffbe0724 100644 --- a/coregrind/m_syswrap/syswrap-ppc64-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c index 4f03f218eb..b720f62d06 100644 --- a/coregrind/m_syswrap/syswrap-s390x-linux.c +++ b/coregrind/m_syswrap/syswrap-s390x-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c index f57b5395ca..9afd03695b 100644 --- a/coregrind/m_syswrap/syswrap-x86-linux.c +++ b/coregrind/m_syswrap/syswrap-x86-linux.c @@ -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 diff --git a/memcheck/tests/linux/Makefile.am b/memcheck/tests/linux/Makefile.am index 95508129fc..9a950d8481 100644 --- a/memcheck/tests/linux/Makefile.am +++ b/memcheck/tests/linux/Makefile.am @@ -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 index 0000000000..6290fe0a1d --- /dev/null +++ b/memcheck/tests/linux/bug480706.c @@ -0,0 +1,8 @@ +#include + +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 index 0000000000..e69de29bb2 diff --git a/memcheck/tests/linux/bug480706.vgtest b/memcheck/tests/linux/bug480706.vgtest new file mode 100644 index 0000000000..4b2a486b68 --- /dev/null +++ b/memcheck/tests/linux/bug480706.vgtest @@ -0,0 +1,3 @@ +prog: bug480706 +vgopts: -q +