]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add support for setns syscall
authorMichal Privoznik <mprivozn@redhat.com>
Fri, 15 Nov 2019 09:37:53 +0000 (10:37 +0100)
committerMark Wielaard <mark@klomp.org>
Tue, 28 Apr 2020 15:36:20 +0000 (17:36 +0200)
I've tested this on amd64 and arm but I'm enabling it on all
arches since the syscall should work identically on all of them.

This was requested by users for a long time (almost 5 years) and
in fact, some programs (like libvirt) use namespaces and fork off
to enter other namespaces. Lack of implementation means valgrind
can't be used with these programs (or their configuration must be
changed to not use namespaces, which defeats the purpose).

Without knowing it, I've converged to same patch as mentioned in
bugs below.

https://bugs.kde.org/show_bug.cgi?id=343099
https://bugs.kde.org/show_bug.cgi?id=368923
https://bugs.kde.org/show_bug.cgi?id=369031

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
12 files changed:
NEWS
coregrind/m_syswrap/priv_syswrap-linux.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-linux.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-s390x-linux.c
coregrind/m_syswrap/syswrap-x86-linux.c
include/vki/vki-scnums-mips32-linux.h

diff --git a/NEWS b/NEWS
index ef95c3f90fdffde57d32b205947d030efe6a4e0d..75491a5b371b634926a1823b424fbaea70196fe9 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -86,6 +86,9 @@ To see details of a given bug, visit
   https://bugs.kde.org/show_bug.cgi?id=XXXXXX
 where XXXXXX is the bug number as listed below.
 
+343099  Linux setns syscall wrapper missing, unhandled syscall: 308
+        == 368923 WARNING: unhandled arm64-linux syscall: 268 (setns)
+        == 369031 WARNING: unhandled amd64-linux syscall: 308 (setns)
 385386  Assertion failed "szB >= CACHE_ENTRY_SIZE" at m_debuginfo/image.c:517
 400162  Patch: Guard against __GLIBC_PREREQ for musl libc
 400593  In Coregrind, use statx for some internal syscalls if [f]stat[64] fail
index 708e5fda3f7c4849bb9017f85af71a0c38572d68..349a97e4d15f334a85838e2cb91345d8a041f3a8 100644 (file)
@@ -237,6 +237,7 @@ DECL_TEMPLATE(linux, sys_sched_setaffinity);
 DECL_TEMPLATE(linux, sys_sched_getaffinity);
 
 DECL_TEMPLATE(linux, sys_unshare);
+DECL_TEMPLATE(linux, sys_setns);
 
 // These ones have different parameters and/or return values on Darwin.
 // Also, some archs on Linux do not match the generic wrapper for sys_pipe.
index 9b8068d0ffc8c3826589726eccfe7e63752e0c5e..0aef84af99b2baa57c44ae8079b6e48e440d5717 100644 (file)
@@ -839,7 +839,7 @@ static SyscallTableEntry syscall_table[] = {
    LINXY(__NR_clock_adjtime,     sys_clock_adjtime),    // 305
    LINX_(__NR_syncfs,            sys_syncfs),           // 306
    LINXY(__NR_sendmmsg,          sys_sendmmsg),         // 307
-//   LINX_(__NR_setns,             sys_ni_syscall),       // 308
+   LINX_(__NR_setns,             sys_setns),            // 308
    LINXY(__NR_getcpu,            sys_getcpu),           // 309
 
    LINXY(__NR_process_vm_readv,  sys_process_vm_readv), // 310
index 3722cdde1aedf14a2d7c386448613a4b461a4234..db7ce10567bf7207752ed4d85a13957703b15456 100644 (file)
@@ -1005,7 +1005,7 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY(__NR_clock_adjtime,     sys_clock_adjtime),    // 372
    LINX_(__NR_syncfs,            sys_syncfs),           // 373
    LINXY(__NR_sendmmsg,          sys_sendmmsg),         // 374
-
+   LINX_(__NR_setns,             sys_setns),            // 375
    LINXY(__NR_process_vm_readv,  sys_process_vm_readv), // 376
    LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 377
 
index 017d3a779072930d7631d70922790509c440b24e..3ae8d86cf9c809ed497ce734784075f2817b77d2 100644 (file)
@@ -800,7 +800,7 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY(__NR_open_by_handle_at, sys_open_by_handle_at), // 265
    LINXY(__NR_clock_adjtime,     sys_clock_adjtime),     // 266
    LINX_(__NR_syncfs,            sys_syncfs),            // 267
-   //   (__NR_setns,             sys_ni_syscall),        // 268
+   LINX_(__NR_setns,             sys_setns),             // 268
    LINXY(__NR_sendmmsg,          sys_sendmmsg),          // 269
    LINXY(__NR_process_vm_readv,  sys_process_vm_readv),  // 270
    LINX_(__NR_process_vm_writev, sys_process_vm_writev), // 271
index 797d65710b57158d47d552ca27a92c6883b2564b..b32bd214adaed628d0592af2e7e8a285f4a05bfb 100644 (file)
@@ -3772,6 +3772,17 @@ PRE(sys_unshare)
    PRE_REG_READ1(int, "unshare", unsigned long, flags);
 }
 
+PRE(sys_setns)
+{
+   PRINT("sys_setns ( %ld, %ld )", SARG1, SARG2);
+   PRE_REG_READ2(int, "setns",
+                 int, fd,
+                 int, nstype);
+   if (!ML_(fd_allowed)(ARG1, "setns", tid, False))
+      SET_STATUS_Failure( VKI_EBADF );
+}
+
+
 /* ---------------------------------------------------------------------
    miscellaneous wrappers
    ------------------------------------------------------------------ */
index 477f599216ac465351236112e2be6750afcb9bee..c70bc21b1d94ee4b0bfe1abee203bc458fae1cf7 100644 (file)
@@ -1090,6 +1090,7 @@ static SyscallTableEntry syscall_main_table[] = {
    //..
    LINXY (__NR_clock_adjtime,          sys_clock_adjtime),           // 341
    LINX_ (__NR_syncfs,                 sys_syncfs),                  // 342
+   LINX_ (__NR_setns,                  sys_setns),                   // 343
    //..
    LINXY (__NR_process_vm_readv,       sys_process_vm_readv),        // 345
    LINX_ (__NR_process_vm_writev,      sys_process_vm_writev),       // 346
index b1f548a5faee84897859cf7e8a7782554916a987..f6624bbf6a8eb2038003d39f3c023fd420d6b2d5 100644 (file)
@@ -809,6 +809,7 @@ static SyscallTableEntry syscall_main_table[] = {
    LINX_ (__NR_pwritev2, sys_pwritev2),
    LINX_ (__NR_syncfs, sys_syncfs),
    LINXY (__NR_statx, sys_statx),
+   LINX_ (__NR_setns, sys_setns),
 };
 
 SyscallTableEntry * ML_(get_linux_syscall_entry) ( UInt sysno )
index 4ab9bccedc5291cb178576433a38fe40d1c8a1c1..35a11ba387b784b23f7d205e08c8b147fee2d81e 100644 (file)
@@ -808,6 +808,7 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY (__NR_getrandom,              sys_getrandom),
    LINXY (__NR_memfd_create,           sys_memfd_create),
    LINXY (__NR_statx,                  sys_statx),
+   LINX_ (__NR_setns,                  sys_setns),
    //    (__NR_bpf,                    sys_ni_syscall),
    //    (__NR_execveat,               sys_ni_syscall),
    //    (__NR_userfaultfd,            sys_ni_syscall),
index 3354d41c0fb6d2a6711f0b10945b6b0f5cfaa744..7655b4bc9700159f2140780f63111db0a6ccbfb3 100644 (file)
@@ -817,7 +817,7 @@ static SyscallTableEntry syscall_table[] = {
    LINXY(__NR_open_by_handle_at, sys_open_by_handle_at),              // 336
    LINXY(__NR_clock_adjtime, sys_clock_adjtime),                      // 337
    LINX_(__NR_syncfs, sys_syncfs),                                    // 338
-// ?????(__NR_setns, ),                                               // 339
+   LINX_(__NR_setns, sys_setns),                                      // 339
 
    LINXY(__NR_process_vm_readv, sys_process_vm_readv),                // 340
    LINX_(__NR_process_vm_writev, sys_process_vm_writev),              // 341
index 68d24e1caea0a31e01f5ef3f688c06ac2d0f963a..e047e59ed6c66afd81ac86a0820d165ecfdcf9be 100644 (file)
@@ -1574,7 +1574,7 @@ static SyscallTableEntry syscall_table[] = {
    LINX_(__NR_syncfs,            sys_syncfs),           // 344
 
    LINXY(__NR_sendmmsg,          sys_sendmmsg),         // 345
-//   LINX_(__NR_setns,             sys_ni_syscall),       // 346
+   LINX_(__NR_setns,             sys_setns),            // 346
    LINXY(__NR_process_vm_readv,  sys_process_vm_readv), // 347
    LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 348
    LINX_(__NR_kcmp,              sys_kcmp),             // 349
index 544fb01a843d10c74388d226f7a91655311ebce9..3f3f6f60bf7842e2d4469f7d23dfbbbfc288a1e0 100644 (file)
 #define __NR_open_by_handle_at          (__NR_Linux + 340)
 #define __NR_clock_adjtime              (__NR_Linux + 341)
 #define __NR_syncfs                     (__NR_Linux + 342)
+#define __NR_setns                      (__NR_Linux + 343)
 #define __NR_process_vm_readv           (__NR_Linux + 345)
 #define __NR_process_vm_writev          (__NR_Linux + 346)
 #define __NR_kcmp                      (__NR_Linux + 347)