From: Martin Cermak Date: Fri, 19 Sep 2025 07:31:39 +0000 (+0200) Subject: Wrap the setdomainname syscall X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2604bb753a9ff461550e0d4d0c1ebd3ab6488d6d;p=thirdparty%2Fvalgrind.git 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 --git a/NEWS b/NEWS index f768e5ca5..66a9f29a2 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 49a4c222b..752bdf737 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--linux.c diff --git a/coregrind/m_syswrap/syswrap-amd64-linux.c b/coregrind/m_syswrap/syswrap-amd64-linux.c index 88c84b841..8b2c95037 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 5567146eb..e4f5e4c09 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 ada952cca..e1a8a883f 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 0d5aa7965..547417698 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 ba5a8bb17..d1f5dfce3 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 095be9b6a..64fb647b1 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 592d93d8f..94e4ce4d4 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 a0e11d5ed..94010bcee 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 974a4995f..da81c0757 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 5134bd171..dc175e3ec 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 8f7159751..fba3d96fb 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 f129317a8..7d2d495a9 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 f30636f41..6130ce37f 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