]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Add fchmodat2 syscall on linux
authorMark Wielaard <mark@klomp.org>
Sat, 18 Nov 2023 20:17:02 +0000 (21:17 +0100)
committerMark Wielaard <mark@klomp.org>
Sat, 2 Dec 2023 00:58:28 +0000 (01:58 +0100)
fchmodat2 is a new syscall on linux 6.6. It is a variant of fchmodat
that takes an extra flags argument.

https://bugs.kde.org/show_bug.cgi?id=477198

14 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-ppc32-linux.c
coregrind/m_syswrap/syswrap-ppc64-linux.c
coregrind/m_syswrap/syswrap-s390x-linux.c
coregrind/m_syswrap/syswrap-x86-linux.c
include/vki/vki-scnums-shared-linux.h

diff --git a/NEWS b/NEWS
index 188c5107503d4ddfb0641b617e248bc87e82b685..ed42b42cee5b73e13c30a773c4aac612f2594ae3 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -42,6 +42,7 @@ are not entered into bugzilla tend to get forgotten about or ignored.
 476787  Build of Valgrind 3.21.0 fails when SOLARIS_PT_SUNDWTRACE_THRP is
         defined
 476887  WARNING: unhandled amd64-freebsd syscall: 578
+477198  Add fchmodat2 syscall on linux
 477628  Add mremap support for Solaris
 477630  Include ucontext.h rather than sys/ucontext.h in Solaris sources
 477719  vgdb incorrectly replies to qRcmd packet
index f13726bc0d34f740b1307aa87265eaf65c0cbfea..d50cdcc981b981984a04bd85ca983448fe7b2a85 100644 (file)
@@ -334,6 +334,9 @@ DECL_TEMPLATE(linux, sys_memfd_secret);
 // Linux-specific (since Linux 5.6)
 DECL_TEMPLATE(linux, sys_pidfd_getfd);
 
+// Since Linux 6.6
+DECL_TEMPLATE(linux, sys_fchmodat2);
+
 /* ---------------------------------------------------------------------
    Wrappers for sockets and ipc-ery.  These are split into standalone
    procedures because x86-linux hides them inside multiplexors
index 8de4371e203a8cd0ada967b235e1b3e58bb6a120..d93d937211fcf71c6860a872d5697ce770705833 100644 (file)
@@ -886,6 +886,8 @@ static SyscallTableEntry syscall_table[] = {
    LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),      // 441
 
    LINXY(__NR_memfd_secret,      sys_memfd_secret),      // 447
+
+   LINX_(__NR_fchmodat2,         sys_fchmodat2),         // 452
 };
 
 SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
index 5a16ca124e5571ab486a1f26d533ef857cd27d4b..21fc066d6d678fe78553cfd846d9da9b399b66e7 100644 (file)
@@ -1060,6 +1060,8 @@ static SyscallTableEntry syscall_main_table[] = {
    LINX_(__NR_faccessat2,    sys_faccessat2),           // 439
 
    LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),      // 441
+
+   LINX_(__NR_fchmodat2,         sys_fchmodat2),         // 452
 };
 
 
index f80890bd0c7499d0874bde2c126bce1864f2ed01..5a24dcaf390cd016780cae7c8da3b9190b4e4971 100644 (file)
@@ -841,6 +841,8 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),      // 441
 
    LINXY(__NR_memfd_secret,      sys_memfd_secret),      // 447
+
+   LINX_(__NR_fchmodat2,         sys_fchmodat2),         // 452
 };
 
 
index 0cc6221976e8d0db2f2e484e38939003c1597168..01bbba0a6dbcda17320dd459b465b526047f3352 100644 (file)
@@ -6077,6 +6077,17 @@ PRE(sys_fchmodat)
    PRE_MEM_RASCIIZ( "fchmodat(path)", ARG2 );
 }
 
+PRE(sys_fchmodat2)
+{
+   PRINT("sys_fchmodat2 ( %ld, %#" FMT_REGWORD "x(%s), %" FMT_REGWORD "u, %"
+         FMT_REGWORD "u )",
+         SARG1, ARG2, (HChar*)(Addr)ARG2, ARG3, ARG4);
+   PRE_REG_READ4(long, "fchmodat2",
+                 int, dfd, const char *, path, vki_mode_t, mode,
+                 unsigned int, flags);
+   PRE_MEM_RASCIIZ( "fchmodat2(pathname)", ARG2 );
+}
+
 PRE(sys_faccessat)
 {
    PRINT("sys_faccessat ( %ld, %#" FMT_REGWORD "x(%s), %ld )",
index e90809602cfc2e79227ca392fa32688e1fa63f0c..ba0a4538795daf399bf0f9c30ba2a04962d3e2ee 100644 (file)
@@ -1145,6 +1145,8 @@ static SyscallTableEntry syscall_main_table[] = {
    LINX_ (__NR_faccessat2,             sys_faccessat2),              // 439
 
    LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),      // 441
+
+   LINX_(__NR_fchmodat2,               sys_fchmodat2),               // 452
 };
 
 SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno)
index 1452e6b74fce41eea49603da7854e54f4caf2fe3..ead350719dd27459ae499cd1b7205d6d6f9c70d7 100644 (file)
@@ -823,6 +823,7 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY (__NR_pidfd_getfd, sys_pidfd_getfd),
    LINX_ (__NR_faccessat2, sys_faccessat2),
    LINXY(__NR_epoll_pwait2, sys_epoll_pwait2),
+   LINX_ (__NR_fchmodat2, sys_fchmodat2),
 };
 
 SyscallTableEntry * ML_(get_linux_syscall_entry) ( UInt sysno )
index fad05702d2913c028cad2abf5f9eb178fab4f116..b7eaa24ebc3fcdba418bb3ef9bfa5d413930ba78 100644 (file)
@@ -831,6 +831,7 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY(__NR_pidfd_getfd,             sys_pidfd_getfd),
    LINX_ (__NR_faccessat2,             sys_faccessat2),
    LINXY (__NR_epoll_pwait2,           sys_epoll_pwait2),
+   LINX_ (__NR_fchmodat2,              sys_fchmodat2),
 };
 
 SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno)
index 53722fbf7f82d63ef5be96d033e07a1d6e95336e..7cb022131480c4a73e18a2f633f63a252ac5149d 100644 (file)
@@ -1067,6 +1067,8 @@ static SyscallTableEntry syscall_table[] = {
    LINX_(__NR_faccessat2,        sys_faccessat2),       // 439
 
    LINXY (__NR_epoll_pwait2,     sys_epoll_pwait2),      // 441
+
+   LINX_ (__NR_fchmodat2,        sys_fchmodat2),         // 452
 };
 
 SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
index 6a996732514d3a37636fff1905c8705673d5cd36..bd7fbb2c5a1ec4566d270b0e63285d75eb6a703c 100644 (file)
@@ -1033,6 +1033,8 @@ static SyscallTableEntry syscall_table[] = {
    LINX_(__NR_faccessat2,        sys_faccessat2),       // 439
 
    LINXY (__NR_epoll_pwait2,     sys_epoll_pwait2),      // 441
+
+   LINX_ (__NR_fchmodat2,        sys_fchmodat2),         // 452
 };
 
 SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
index 3238eef3ffa5524f993742095b33c502fbb65a8a..4f03f218eb515416ab4eb560145b48f1378039a5 100644 (file)
@@ -876,6 +876,8 @@ static SyscallTableEntry syscall_table[] = {
    LINXY(__NR_epoll_pwait2, sys_epoll_pwait2),                        // 441
 
    LINXY(__NR_memfd_secret, sys_memfd_secret),                        // 447
+
+   LINX_ (__NR_fchmodat2, sys_fchmodat2),                             // 452
 };
 
 SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
index c7eff0585c5dbbf534e197ba3e1d88c89481b83d..f57b5395cae327e092470e4627fe2cbf7404ffc6 100644 (file)
@@ -1657,6 +1657,8 @@ static SyscallTableEntry syscall_table[] = {
    LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),     // 441
 
    LINXY(__NR_memfd_secret,      sys_memfd_secret),      // 447
+
+   LINX_(__NR_fchmodat2,         sys_fchmodat2),         // 452
 };
 
 SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
index 1bd4066703d83c1c1fbb5e1bf07be7f94142436c..068a2cd12bd6f57ecbb97c1c187624e2a565c9fd 100644 (file)
@@ -50,4 +50,6 @@
 
 #define __NR_memfd_secret              447
 
+#define __NR_fchmodat2         452
+
 #endif