]> 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, 9 Dec 2023 21:09:28 +0000 (22:09 +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

(cherry picked from commit 372d09fd9a8d76847c81092ebff71c80fd6c145d)

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 6cd13429a83b578368eb31b3d5b2dc61cd84655c..da0f8c1aab320c173ad4be4bbffcf0ab9855c264 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -8,6 +8,7 @@ The following bugs have been fixed or resolved on this branch.
 476548  valgrind 3.22.0 fails on assertion when loading debuginfo
         file produced by mold
 476708  valgrind-monitor.py regular expressions should use raw strings
+477198  Add fchmodat2 syscall on linux
 
 To see details of a given bug, visit
   https://bugs.kde.org/show_bug.cgi?id=XXXXXX
index 7c9decf5aaa7e5c71bc073ff3bb8ae12c1c240cc..798c456c9ce8e7f8a7a68f7bf53ada145ca036ec 100644 (file)
@@ -331,6 +331,9 @@ DECL_TEMPLATE(linux, sys_openat2);
 // Linux-specific (new in Linux 5.14)
 DECL_TEMPLATE(linux, sys_memfd_secret);
 
+// 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 008600798a5ca775a9be8d66439f0face6eb0502..fe17d118be9029a12de793dbaafe38e4921b9fd7 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 9a7a1e0d271fd46518138ea20c73faba8e73ec6b..811931d3b287d4a786cec294774cc40ef33d48dd 100644 (file)
@@ -1059,6 +1059,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 6af7bab8319e2b0faa287ab30fb80c1701a61c3b..3307bc2ca13aa266a9f4acb39ed824986a8c9056 100644 (file)
@@ -840,6 +840,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 d571fc327f44f2611b3d94bcdba6aa84e8474a0c..efa47f2e6ab546da0978e7724221472089c02c2b 100644 (file)
@@ -6059,6 +6059,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 6268a00ddfef25ed76212673cdca9ebc056c5c10..74a1f6eac2715819f232a111a1660c3124cec35d 100644 (file)
@@ -1143,6 +1143,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 6cdf25893bf20d7445d681cb9f9489c874b2e3d5..4e8508b7adc60047a41b7a613399bc81f481b829 100644 (file)
@@ -820,6 +820,7 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY (__NR_close_range, sys_close_range),
    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 d724cde748ab7597badb63fa2c4da390e46579c8..7859900c1aafc84e1269d640b52c3d25f3d7fff6 100644 (file)
@@ -829,6 +829,7 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY (__NR_close_range,            sys_close_range),
    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 c0cfef2354176c2ab8902441edb753dcb6095d2b..1e19116eebd8d1c0e5209050862157859a521a50 100644 (file)
@@ -1063,6 +1063,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 f5976f30c8bf62c2dbba5bee6f30a1b6a936940e..1097212a42fcc9b72b8882adaeb48ed8793f5da7 100644 (file)
@@ -1032,6 +1032,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 afba154e782e7400ebfafc7b8705fa139abe9a69..3588672c764a05584a0542614d57887635edbaff 100644 (file)
@@ -873,6 +873,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 da4fd8fa20415fdf7875564b19badbb624a4f2a3..58badc6b03aec5edc855eaf9af8cca79035fa90e 100644 (file)
@@ -1658,6 +1658,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 542382b5330f0b011fee9a801faf4d3c72190a6c..a4cd8714946aa3fdaa4577a3a1550c1ef96fba09 100644 (file)
@@ -50,4 +50,6 @@
 
 #define __NR_memfd_secret              447
 
+#define __NR_fchmodat2         452
+
 #endif