|
From: Michal P. <mpr...@re...> - 2019-11-18 13:39:14
|
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 Signed-off-by: Michal Privoznik <mpr...@re...> --- NEWS | 2 ++ coregrind/m_syswrap/priv_syswrap-linux.h | 1 + coregrind/m_syswrap/syswrap-amd64-linux.c | 2 +- coregrind/m_syswrap/syswrap-arm-linux.c | 2 +- coregrind/m_syswrap/syswrap-arm64-linux.c | 2 +- coregrind/m_syswrap/syswrap-linux.c | 11 +++++++++++ coregrind/m_syswrap/syswrap-mips32-linux.c | 1 + coregrind/m_syswrap/syswrap-mips64-linux.c | 1 + coregrind/m_syswrap/syswrap-nanomips-linux.c | 1 + coregrind/m_syswrap/syswrap-s390x-linux.c | 2 +- coregrind/m_syswrap/syswrap-x86-linux.c | 2 +- include/vki/vki-scnums-mips32-linux.h | 1 + 12 files changed, 23 insertions(+), 5 deletions(-) diff --git a/NEWS b/NEWS index e0689d584..91a16c8ba 100644 --- a/NEWS +++ b/NEWS @@ -67,6 +67,8 @@ 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) 400593 In Coregrind, use statx for some internal syscalls if [f]stat[64] fail 406561 mcinfcallWSRU gdbserver_test fails on ppc64 406824 Unsupported baseline diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h index 0cfe78233..905423d78 100644 --- a/coregrind/m_syswrap/priv_syswrap-linux.h +++ b/coregrind/m_syswrap/priv_syswrap-linux.h @@ -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. diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index 9b8068d0f..0aef84af9 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c index 5e8baf8db..31f8dcca5 100644 --- a/coregrind/m_syswrap/syswrap-arm-linux.c +++ b/coregrind/m_syswrap/syswrap-arm-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c index 91329b682..3d9c8167d 100644 --- a/coregrind/m_syswrap/syswrap-arm64-linux.c +++ b/coregrind/m_syswrap/syswrap-arm64-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index f1ecbbf14..ecce9adf6 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -3395,6 +3395,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, True)) + SET_STATUS_Failure( VKI_EBADF ); +} + + /* --------------------------------------------------------------------- miscellaneous wrappers ------------------------------------------------------------------ */ diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c index ace3c1e7a..4f2a58b22 100644 --- a/coregrind/m_syswrap/syswrap-mips32-linux.c +++ b/coregrind/m_syswrap/syswrap-mips32-linux.c @@ -1088,6 +1088,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 diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c index d0bb3cdf1..55087b100 100644 --- a/coregrind/m_syswrap/syswrap-mips64-linux.c +++ b/coregrind/m_syswrap/syswrap-mips64-linux.c @@ -816,6 +816,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 ) diff --git a/coregrind/m_syswrap/syswrap-nanomips-linux.c b/coregrind/m_syswrap/syswrap-nanomips-linux.c index aac595a5d..bc448aca4 100644 --- a/coregrind/m_syswrap/syswrap-nanomips-linux.c +++ b/coregrind/m_syswrap/syswrap-nanomips-linux.c @@ -805,6 +805,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), diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c index 3354d41c0..7655b4bc9 100644 --- a/coregrind/m_syswrap/syswrap-s390x-linux.c +++ b/coregrind/m_syswrap/syswrap-s390x-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c index 33d1213a3..6ba5617c0 100644 --- a/coregrind/m_syswrap/syswrap-x86-linux.c +++ b/coregrind/m_syswrap/syswrap-x86-linux.c @@ -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 diff --git a/include/vki/vki-scnums-mips32-linux.h b/include/vki/vki-scnums-mips32-linux.h index 544fb01a8..3f3f6f60b 100644 --- a/include/vki/vki-scnums-mips32-linux.h +++ b/include/vki/vki-scnums-mips32-linux.h @@ -378,6 +378,7 @@ #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) -- 2.23.0 |
|
From: Michal P. <mpr...@re...> - 2019-11-28 08:12:04
|
On 11/18/19 2:38 PM, Michal Privoznik wrote: > Ping? Michal |
|
From: Michal P. <mpr...@re...> - 2020-03-27 17:01:43
|
On 28. 11. 2019 9:11, Michal Privoznik wrote: > On 11/18/19 2:38 PM, Michal Privoznik wrote: >> > > Ping? > > Michal > Ping2? This patch fixes the following bugs: https://bugs.kde.org/show_bug.cgi?id=368923 https://bugs.kde.org/show_bug.cgi?id=343099 and it would be real pity if it would slip the release, as bugs are opened for 5 an 4 years. Thanks, Michal |
|
From: Mark W. <ma...@so...> - 2020-04-28 15:43:48
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=60a7ebedc0b53e2cdcea112635a285d8136b68a8 commit 60a7ebedc0b53e2cdcea112635a285d8136b68a8 Author: Michal Privoznik <mpr...@re...> Date: Fri Nov 15 10:37:53 2019 +0100 Add support for setns syscall 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 <mpr...@re...> Diff: --- NEWS | 3 +++ coregrind/m_syswrap/priv_syswrap-linux.h | 1 + coregrind/m_syswrap/syswrap-amd64-linux.c | 2 +- coregrind/m_syswrap/syswrap-arm-linux.c | 2 +- coregrind/m_syswrap/syswrap-arm64-linux.c | 2 +- coregrind/m_syswrap/syswrap-linux.c | 11 +++++++++++ coregrind/m_syswrap/syswrap-mips32-linux.c | 1 + coregrind/m_syswrap/syswrap-mips64-linux.c | 1 + coregrind/m_syswrap/syswrap-nanomips-linux.c | 1 + coregrind/m_syswrap/syswrap-s390x-linux.c | 2 +- coregrind/m_syswrap/syswrap-x86-linux.c | 2 +- include/vki/vki-scnums-mips32-linux.h | 1 + 12 files changed, 24 insertions(+), 5 deletions(-) diff --git a/NEWS b/NEWS index ef95c3f90f..75491a5b37 100644 --- 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 diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h index 708e5fda3f..349a97e4d1 100644 --- a/coregrind/m_syswrap/priv_syswrap-linux.h +++ b/coregrind/m_syswrap/priv_syswrap-linux.h @@ -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. diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index 9b8068d0ff..0aef84af99 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c index 3722cdde1a..db7ce10567 100644 --- a/coregrind/m_syswrap/syswrap-arm-linux.c +++ b/coregrind/m_syswrap/syswrap-arm-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c index 017d3a7790..3ae8d86cf9 100644 --- a/coregrind/m_syswrap/syswrap-arm64-linux.c +++ b/coregrind/m_syswrap/syswrap-arm64-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index 797d65710b..b32bd214ad 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -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 ------------------------------------------------------------------ */ diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c index 477f599216..c70bc21b1d 100644 --- a/coregrind/m_syswrap/syswrap-mips32-linux.c +++ b/coregrind/m_syswrap/syswrap-mips32-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c index b1f548a5fa..f6624bbf6a 100644 --- a/coregrind/m_syswrap/syswrap-mips64-linux.c +++ b/coregrind/m_syswrap/syswrap-mips64-linux.c @@ -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 ) diff --git a/coregrind/m_syswrap/syswrap-nanomips-linux.c b/coregrind/m_syswrap/syswrap-nanomips-linux.c index 4ab9bccedc..35a11ba387 100644 --- a/coregrind/m_syswrap/syswrap-nanomips-linux.c +++ b/coregrind/m_syswrap/syswrap-nanomips-linux.c @@ -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), diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c index 3354d41c0f..7655b4bc97 100644 --- a/coregrind/m_syswrap/syswrap-s390x-linux.c +++ b/coregrind/m_syswrap/syswrap-s390x-linux.c @@ -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 diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c index 68d24e1cae..e047e59ed6 100644 --- a/coregrind/m_syswrap/syswrap-x86-linux.c +++ b/coregrind/m_syswrap/syswrap-x86-linux.c @@ -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 diff --git a/include/vki/vki-scnums-mips32-linux.h b/include/vki/vki-scnums-mips32-linux.h index 544fb01a84..3f3f6f60bf 100644 --- a/include/vki/vki-scnums-mips32-linux.h +++ b/include/vki/vki-scnums-mips32-linux.h @@ -378,6 +378,7 @@ #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) |