|
From: Mark W. <ma...@so...> - 2025-09-19 16:41:18
|
https://sourceware.org/cgit/valgrind/commit/?id=2604bb753a9ff461550e0d4d0c1ebd3ab6488d6d commit 2604bb753a9ff461550e0d4d0c1ebd3ab6488d6d Author: Martin Cermak <mc...@re...> Date: Fri Sep 19 09:31:39 2025 +0200 Wrap the setdomainname syscall The setdomainname() call sets the domain name to the value given in the character array name. The len argument specifies the number of bytes in name. (Thus, name does not require a terminating null byte.) Declare a setdomainname wrapper in priv_syswrap-linux.h and hook it for {amd64,arm,arm64,mips64,ppc32,ppc64,riscv64,s390x,x86}-linux using LINX_ with PRE handler in syswrap-linux.c https://bugs.kde.org/show_bug.cgi?id=369030 Diff: --- NEWS | 1 + 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 | 7 +++++++ coregrind/m_syswrap/syswrap-mips32-linux.c | 2 +- coregrind/m_syswrap/syswrap-mips64-linux.c | 9 +-------- coregrind/m_syswrap/syswrap-nanomips-linux.c | 9 +-------- coregrind/m_syswrap/syswrap-ppc32-linux.c | 2 +- coregrind/m_syswrap/syswrap-ppc64-linux.c | 2 +- coregrind/m_syswrap/syswrap-riscv64-linux.c | 1 + coregrind/m_syswrap/syswrap-s390x-linux.c | 2 +- coregrind/m_syswrap/syswrap-x86-linux.c | 2 +- include/vki/vki-scnums-riscv64-linux.h | 1 + 15 files changed, 21 insertions(+), 24 deletions(-) diff --git a/NEWS b/NEWS index f768e5ca5b..66a9f29a22 100644 --- a/NEWS +++ b/NEWS @@ -69,6 +69,7 @@ are not entered into bugzilla tend to get forgotten about or ignored. 309554 Wrap syscall remap_file_pages (216) 338803 Handling of dwz debug alt files or cross-CU is broken +369030 Wrap linux syscall: 171 (setdomainname) 388526 Inconsistent severity in message text: "WARNING: Serious error" 418756 MAP_FIXED_NOREPLACE mmap flag unsupported 493430 Review all syscalls that use or return (new) file descriptors diff --git a/coregrind/m_syswrap/priv_syswrap-linux.h b/coregrind/m_syswrap/priv_syswrap-linux.h index 49a4c222b5..752bdf7370 100644 --- a/coregrind/m_syswrap/priv_syswrap-linux.h +++ b/coregrind/m_syswrap/priv_syswrap-linux.h @@ -62,6 +62,7 @@ DECL_TEMPLATE(linux, sys_readahead); DECL_TEMPLATE(linux, sys_move_pages); DECL_TEMPLATE(linux, sys_cachestat); DECL_TEMPLATE(linux, sys_sysfs); +DECL_TEMPLATE(linux, sys_setdomainname); // clone is similar enough between linux variants to have a generic // version, but which will call an extern defined in syswrap-<platform>-linux.c diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index 88c84b8418..8b2c95037f 100644 --- a/coregrind/m_syswrap/syswrap-amd64-linux.c +++ b/coregrind/m_syswrap/syswrap-amd64-linux.c @@ -675,7 +675,7 @@ static SyscallTableEntry syscall_table[] = { // (__NR_reboot, sys_reboot), // 169 GENX_(__NR_sethostname, sys_sethostname), // 170 - // (__NR_setdomainname, sys_setdomainname), // 171 + LINX_(__NR_setdomainname, sys_setdomainname), // 171 GENX_(__NR_iopl, sys_iopl), // 172 LINX_(__NR_ioperm, sys_ioperm), // 173 GENX_(__NR_create_module, sys_ni_syscall), // 174 diff --git a/coregrind/m_syswrap/syswrap-arm-linux.c b/coregrind/m_syswrap/syswrap-arm-linux.c index 5567146eb3..e4f5e4c092 100644 --- a/coregrind/m_syswrap/syswrap-arm-linux.c +++ b/coregrind/m_syswrap/syswrap-arm-linux.c @@ -694,7 +694,7 @@ static SyscallTableEntry syscall_main_table[] = { PLAX_(__NR_sigreturn, sys_sigreturn), // 119 ?/Linux LINX_(__NR_clone, sys_clone), // 120 -//zz // (__NR_setdomainname, sys_setdomainname), // 121 */*(?) + LINX_(__NR_setdomainname, sys_setdomainname), // 121 GENXY(__NR_uname, sys_newuname), // 122 // PLAX_(__NR_modify_ldt, sys_modify_ldt), // 123 LINXY(__NR_adjtimex, sys_adjtimex), // 124 diff --git a/coregrind/m_syswrap/syswrap-arm64-linux.c b/coregrind/m_syswrap/syswrap-arm64-linux.c index ada952cca6..e1a8a883fc 100644 --- a/coregrind/m_syswrap/syswrap-arm64-linux.c +++ b/coregrind/m_syswrap/syswrap-arm64-linux.c @@ -710,7 +710,7 @@ static SyscallTableEntry syscall_main_table[] = { GENX_(__NR_setgroups, sys_setgroups), // 159 GENXY(__NR_uname, sys_newuname), // 160 GENX_(__NR_sethostname, sys_sethostname), // 161 - // (__NR_setdomainname, sys_ni_syscall), // 162 + LINX_(__NR_setdomainname, sys_setdomainname), // 162 GENXY(__NR_getrlimit, sys_old_getrlimit), // 163 GENX_(__NR_setrlimit, sys_setrlimit), // 164 GENXY(__NR_getrusage, sys_getrusage), // 165 diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index 0d5aa7965d..5474176982 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -1653,6 +1653,13 @@ POST(sys_sendfile64) } } +PRE(sys_setdomainname) +{ + PRINT ("sys_setdomainname ( %#" FMT_REGWORD "x, %ld )", ARG1, SARG2); + PRE_REG_READ2 (long, "setdomainname", const void *, name, int, len); + PRE_MEM_READ("setdomainname(name)", ARG1, ARG2); +} + static void pre_read_timespec64 (ThreadId tid, const char *msg, UWord arg) { struct vki_timespec64 *ts64 = (void *)(Addr)arg; diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c index ba5a8bb179..d1f5dfce36 100644 --- a/coregrind/m_syswrap/syswrap-mips32-linux.c +++ b/coregrind/m_syswrap/syswrap-mips32-linux.c @@ -886,7 +886,7 @@ static SyscallTableEntry syscall_main_table[] = { GENX_ (__NR_fsync, sys_fsync), // 118 PLAX_ (__NR_sigreturn, sys_sigreturn), // 119 LINX_ (__NR_clone, sys_clone), // 120 - //.. // (__NR_setdomainname, sys_setdomainname), // 121 + LINX_ (__NR_setdomainname, sys_setdomainname), // 121 GENXY (__NR_uname, sys_newuname), // 122 //.. PLAX_(__NR_modify_ldt, sys_modify_ldt), // 123 LINXY (__NR_adjtimex, sys_adjtimex), // 124 diff --git a/coregrind/m_syswrap/syswrap-mips64-linux.c b/coregrind/m_syswrap/syswrap-mips64-linux.c index 095be9b6ae..64fb647b18 100644 --- a/coregrind/m_syswrap/syswrap-mips64-linux.c +++ b/coregrind/m_syswrap/syswrap-mips64-linux.c @@ -217,7 +217,6 @@ SysRes sys_set_tls ( ThreadId tid, Addr tlsptr ) DECL_TEMPLATE (mips_linux, sys_set_thread_area); DECL_TEMPLATE (mips_linux, sys_swapon); DECL_TEMPLATE (mips_linux, sys_swapoff); -DECL_TEMPLATE (mips_linux, sys_setdomainname); DECL_TEMPLATE (mips_linux, sys_sethostname); DECL_TEMPLATE (mips_linux, sys_reboot); DECL_TEMPLATE (mips_linux, sys_cacheflush); @@ -273,12 +272,6 @@ PRE(sys_reboot) *flags |= SfMayBlock; } -PRE(sys_setdomainname) -{ - PRINT ("sys_setdomainname ( %#" FMT_REGWORD "x, %ld )", ARG1, SARG2); - PRE_REG_READ2 (long, "setdomainname", const void *, name, int, len); -} - PRE(sys_sethostname) { PRINT ("sys_sethostname ( %#" FMT_REGWORD "x, %ld )", ARG1, SARG2); @@ -658,7 +651,7 @@ static SyscallTableEntry syscall_main_table[] = { PLAX_ (__NR_swapoff, sys_swapoff), PLAX_ (__NR_reboot, sys_reboot), PLAX_ (__NR_sethostname, sys_sethostname), - PLAX_ (__NR_setdomainname, sys_setdomainname), + LINX_ (__NR_setdomainname, sys_setdomainname), GENX_ (__NR_create_module, sys_ni_syscall), LINX_ (__NR_init_module, sys_init_module), LINX_ (__NR_delete_module, sys_delete_module), diff --git a/coregrind/m_syswrap/syswrap-nanomips-linux.c b/coregrind/m_syswrap/syswrap-nanomips-linux.c index 592d93d8f3..94e4ce4d43 100644 --- a/coregrind/m_syswrap/syswrap-nanomips-linux.c +++ b/coregrind/m_syswrap/syswrap-nanomips-linux.c @@ -382,7 +382,6 @@ DECL_TEMPLATE (mips_linux, sys_set_thread_area); DECL_TEMPLATE (mips_linux, sys_ptrace); DECL_TEMPLATE (mips_linux, sys_unshare); DECL_TEMPLATE (mips_linux, sys_reboot); -DECL_TEMPLATE (mips_linux, sys_setdomainname); DECL_TEMPLATE (mips_linux, sys_sethostname); DECL_TEMPLATE (mips_linux, sys_swapon); DECL_TEMPLATE (mips_linux, sys_swapoff); @@ -514,12 +513,6 @@ PRE(sys_reboot) *flags |= SfMayBlock; } -PRE(sys_setdomainname) -{ - PRINT ("sys_setdomainname ( %#lx, %ld )", ARG1, SARG2); - PRE_REG_READ2 (long, "setdomainname", const void *, name, int, len); -} - PRE(sys_sethostname) { PRINT ("sys_sethostname ( %#lx, %ld )", ARG1, SARG2); @@ -712,7 +705,7 @@ static SyscallTableEntry syscall_main_table[] = { GENX_ (__NR_setgroups, sys_setgroups), GENXY (__NR_uname, sys_newuname), PLAX_ (__NR_sethostname, sys_sethostname), - PLAX_ (__NR_setdomainname, sys_setdomainname), + LINX_ (__NR_setdomainname, sys_setdomainname), GENXY (__NR_getrusage, sys_getrusage), GENX_ (__NR_umask, sys_umask), LINXY (__NR_prctl, sys_prctl), diff --git a/coregrind/m_syswrap/syswrap-ppc32-linux.c b/coregrind/m_syswrap/syswrap-ppc32-linux.c index a0e11d5ed6..94010bcee1 100644 --- a/coregrind/m_syswrap/syswrap-ppc32-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc32-linux.c @@ -757,7 +757,7 @@ static SyscallTableEntry syscall_table[] = { PLAX_(__NR_sigreturn, sys_sigreturn), // 119 ?/Linux //.. LINX_(__NR_clone, sys_clone), // 120 -//.. // (__NR_setdomainname, sys_setdomainname), // 121 */*(?) + LINX_(__NR_setdomainname, sys_setdomainname), // 121 GENXY(__NR_uname, sys_newuname), // 122 //.. PLAX_(__NR_modify_ldt, sys_modify_ldt), // 123 LINXY(__NR_adjtimex, sys_adjtimex), // 124 diff --git a/coregrind/m_syswrap/syswrap-ppc64-linux.c b/coregrind/m_syswrap/syswrap-ppc64-linux.c index 974a4995fd..da81c0757e 100644 --- a/coregrind/m_syswrap/syswrap-ppc64-linux.c +++ b/coregrind/m_syswrap/syswrap-ppc64-linux.c @@ -745,7 +745,7 @@ static SyscallTableEntry syscall_table[] = { // _____(__NR_sigreturn, sys_sigreturn), // 119 LINX_(__NR_clone, sys_clone), // 120 -// _____(__NR_setdomainname, sys_setdomainname), // 121 + LINX_(__NR_setdomainname, sys_setdomainname), // 121 GENXY(__NR_uname, sys_newuname), // 122 // _____(__NR_modify_ldt, sys_modify_ldt), // 123 LINXY(__NR_adjtimex, sys_adjtimex), // 124 diff --git a/coregrind/m_syswrap/syswrap-riscv64-linux.c b/coregrind/m_syswrap/syswrap-riscv64-linux.c index 5134bd1713..dc175e3eca 100644 --- a/coregrind/m_syswrap/syswrap-riscv64-linux.c +++ b/coregrind/m_syswrap/syswrap-riscv64-linux.c @@ -468,6 +468,7 @@ static SyscallTableEntry syscall_main_table[] = { GENX_(__NR_setgroups, sys_setgroups), /* 159 */ GENXY(__NR_uname, sys_newuname), /* 160 */ GENX_(__NR_sethostname, sys_sethostname), /* 161 */ + LINX_(__NR_setdomainname, sys_setdomainname), /* 162 */ GENXY(__NR_getrlimit, sys_getrlimit), /* 163 */ GENX_(__NR_setrlimit, sys_setrlimit), /* 164 */ GENXY(__NR_getrusage, sys_getrusage), /* 165 */ diff --git a/coregrind/m_syswrap/syswrap-s390x-linux.c b/coregrind/m_syswrap/syswrap-s390x-linux.c index 8f7159751a..fba3d96fb5 100644 --- a/coregrind/m_syswrap/syswrap-s390x-linux.c +++ b/coregrind/m_syswrap/syswrap-s390x-linux.c @@ -556,7 +556,7 @@ static SyscallTableEntry syscall_table[] = { PLAX_(__NR_sigreturn, sys_sigreturn), // 119 LINX_(__NR_clone, sys_clone), // 120 -// ?????(__NR_setdomainname, ), // 121 + LINX_(__NR_setdomainname, sys_setdomainname), // 121 GENXY(__NR_uname, sys_newuname), // 122 GENX_(123, sys_ni_syscall), /* unimplemented (by the kernel) */ // 123 // ?????(__NR_adjtimex, ), // 124 diff --git a/coregrind/m_syswrap/syswrap-x86-linux.c b/coregrind/m_syswrap/syswrap-x86-linux.c index f129317a82..7d2d495a90 100644 --- a/coregrind/m_syswrap/syswrap-x86-linux.c +++ b/coregrind/m_syswrap/syswrap-x86-linux.c @@ -1302,7 +1302,7 @@ static SyscallTableEntry syscall_table[] = { PLAX_(__NR_sigreturn, sys_sigreturn), // 119 ?/Linux LINX_(__NR_clone, sys_clone), // 120 -//zz // (__NR_setdomainname, sys_setdomainname), // 121 */*(?) + LINX_(__NR_setdomainname, sys_setdomainname), // 121 GENXY(__NR_uname, sys_newuname), // 122 PLAX_(__NR_modify_ldt, sys_modify_ldt), // 123 LINXY(__NR_adjtimex, sys_adjtimex), // 124 diff --git a/include/vki/vki-scnums-riscv64-linux.h b/include/vki/vki-scnums-riscv64-linux.h index f30636f417..6130ce37f1 100644 --- a/include/vki/vki-scnums-riscv64-linux.h +++ b/include/vki/vki-scnums-riscv64-linux.h @@ -192,6 +192,7 @@ #define __NR_setgroups 159 #define __NR_uname 160 #define __NR_sethostname 161 +#define __NR_setdomainname 162 #define __NR_getrlimit 163 #define __NR_setrlimit 164 #define __NR_getrusage 165 |