]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
support pidfd_getfd
authorAli Polatel <alip@chesswob.org>
Wed, 18 Oct 2023 12:55:12 +0000 (12:55 +0000)
committerMark Wielaard <mark@klomp.org>
Sat, 18 Nov 2023 00:33:33 +0000 (01:33 +0100)
Signed-off-by: Ali Polatel <alip@chesswob.org>
13 files changed:
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

index 7c9decf5aaa7e5c71bc073ff3bb8ae12c1c240cc..f13726bc0d34f740b1307aa87265eaf65c0cbfea 100644 (file)
@@ -331,6 +331,9 @@ DECL_TEMPLATE(linux, sys_openat2);
 // Linux-specific (new in Linux 5.14)
 DECL_TEMPLATE(linux, sys_memfd_secret);
 
+// Linux-specific (since Linux 5.6)
+DECL_TEMPLATE(linux, sys_pidfd_getfd);
+
 /* ---------------------------------------------------------------------
    Wrappers for sockets and ipc-ery.  These are split into standalone
    procedures because x86-linux hides them inside multiplexors
index 008600798a5ca775a9be8d66439f0face6eb0502..8de4371e203a8cd0ada967b235e1b3e58bb6a120 100644 (file)
@@ -880,7 +880,7 @@ static SyscallTableEntry syscall_table[] = {
    GENX_(__NR_clone3,            sys_ni_syscall),        // 435
    LINXY(__NR_close_range,       sys_close_range),       // 436
    LINXY(__NR_openat2,           sys_openat2),           // 437
-
+   LINXY(__NR_pidfd_getfd,       sys_pidfd_getfd),       // 438
    LINX_(__NR_faccessat2,       sys_faccessat2),        // 439
 
    LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),      // 441
index 9a7a1e0d271fd46518138ea20c73faba8e73ec6b..bac347d354c2c240a83fc3820d545c848008fea6 100644 (file)
@@ -1056,6 +1056,7 @@ static SyscallTableEntry syscall_main_table[] = {
    GENX_(__NR_clone3,            sys_ni_syscall),        // 435
    LINXY(__NR_close_range,       sys_close_range),       // 436
 
+   LINXY(__NR_pidfd_getfd,       sys_pidfd_getfd),       // 438
    LINX_(__NR_faccessat2,    sys_faccessat2),           // 439
 
    LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),      // 441
index 6af7bab8319e2b0faa287ab30fb80c1701a61c3b..5ba6bea75c9d92bad0caff6e0dad193e9bed987b 100644 (file)
@@ -835,6 +835,7 @@ static SyscallTableEntry syscall_main_table[] = {
    GENX_(__NR_clone3,            sys_ni_syscall),        // 435
    LINXY(__NR_close_range,       sys_close_range),       // 436
 
+   LINXY(__NR_pidfd_getfd,       sys_pidfd_getfd),       // 438
    LINX_(__NR_faccessat2,        sys_faccessat2),        // 439
 
    LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),      // 441
index d571fc327f44f2611b3d94bcdba6aa84e8474a0c..18286c488446b846b31a57a4e4a43389dd695322 100644 (file)
@@ -13646,6 +13646,24 @@ POST(sys_pidfd_open)
    }
 }
 
+PRE(sys_pidfd_getfd)
+{
+   PRINT("sys_pidfd_getfd ( %ld, %ld, %ld )", SARG1, SARG2, SARG3);
+   PRE_REG_READ3(long, "pidfd_getfd", int, pidfd, int, targetfd, unsigned int, flags);
+}
+
+POST(sys_pidfd_getfd)
+{
+   vg_assert(SUCCESS);
+   if (!ML_(fd_allowed)(RES, "pidfd_getfd", tid, True)) {
+      VG_(close)(RES);
+      SET_STATUS_Failure( VKI_EMFILE );
+   } else {
+      if (VG_(clo_track_fds))
+         ML_(record_fd_open_nameless) (tid, RES);
+   }
+}
+
 #undef PRE
 #undef POST
 
index 6268a00ddfef25ed76212673cdca9ebc056c5c10..0ef4f0bc1e82bb0469a8d76f7fc7a98f643469c7 100644 (file)
@@ -1140,6 +1140,7 @@ static SyscallTableEntry syscall_main_table[] = {
    GENX_(__NR_clone3,                  sys_ni_syscall),              // 435
    LINXY(__NR_close_range,       sys_close_range),       // 436
 
+   LINXY(__NR_pidfd_getfd,             sys_pidfd_getfd),             // 438
    LINX_ (__NR_faccessat2,             sys_faccessat2),              // 439
 
    LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),      // 441
index 6cdf25893bf20d7445d681cb9f9489c874b2e3d5..b718538bd6131922d8985c99d3f98caa2360e040 100644 (file)
@@ -818,6 +818,7 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY (__NR_pidfd_open, sys_pidfd_open),
    GENX_ (__NR_clone3, sys_ni_syscall),
    LINXY (__NR_close_range, sys_close_range),
+   LINXY (__NR_pidfd_getfd, sys_pidfd_getfd),
    LINX_ (__NR_faccessat2, sys_faccessat2),
    LINXY(__NR_epoll_pwait2, sys_epoll_pwait2),
 };
index d724cde748ab7597badb63fa2c4da390e46579c8..38993480394ece05a45fcbb02b6c14d128d4f5d4 100644 (file)
@@ -827,6 +827,7 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY (__NR_pidfd_open,             sys_pidfd_open),
    GENX_ (__NR_clone3,                 sys_ni_syscall),
    LINXY (__NR_close_range,            sys_close_range),
+   LINXY(__NR_pidfd_getfd,             sys_pidfd_getfd),
    LINX_ (__NR_faccessat2,             sys_faccessat2),
    LINXY (__NR_epoll_pwait2,           sys_epoll_pwait2),
 };
index c0cfef2354176c2ab8902441edb753dcb6095d2b..4e8f9a331ba814fd00a6be4c813b4442b7ed8f1c 100644 (file)
@@ -1060,6 +1060,7 @@ static SyscallTableEntry syscall_table[] = {
    GENX_(__NR_clone3,            sys_ni_syscall),        // 435
    LINXY(__NR_close_range,       sys_close_range),       // 436
 
+   LINXY(__NR_pidfd_getfd,       sys_pidfd_getfd),       // 438
    LINX_(__NR_faccessat2,        sys_faccessat2),       // 439
 
    LINXY (__NR_epoll_pwait2,     sys_epoll_pwait2),      // 441
index f5976f30c8bf62c2dbba5bee6f30a1b6a936940e..6e310e7e9744aefcd5bd1063f8a780740f056632 100644 (file)
@@ -1029,6 +1029,7 @@ static SyscallTableEntry syscall_table[] = {
    GENX_(__NR_clone3,            sys_ni_syscall),        // 435
    LINXY(__NR_close_range,       sys_close_range),       // 436
 
+   LINXY(__NR_pidfd_getfd,       sys_pidfd_getfd),       // 438
    LINX_(__NR_faccessat2,        sys_faccessat2),       // 439
 
    LINXY (__NR_epoll_pwait2,     sys_epoll_pwait2),      // 441
index afba154e782e7400ebfafc7b8705fa139abe9a69..88af6752c9cbf0eeeddabcf4e83392cfca07c54b 100644 (file)
@@ -870,6 +870,7 @@ static SyscallTableEntry syscall_table[] = {
    GENX_(__NR_clone3, sys_ni_syscall),                                // 435
    LINXY(__NR_close_range, sys_close_range),                          // 436
 
+   LINXY(__NR_pidfd_getfd, sys_pidfd_getfd),                          // 438
    LINX_(__NR_faccessat2,  sys_faccessat2),                           // 439
 
    LINXY(__NR_epoll_pwait2, sys_epoll_pwait2),                        // 441
index da4fd8fa20415fdf7875564b19badbb624a4f2a3..c7eff0585c5dbbf534e197ba3e1d88c89481b83d 100644 (file)
@@ -1651,8 +1651,7 @@ static SyscallTableEntry syscall_table[] = {
    GENX_(__NR_clone3,            sys_ni_syscall),       // 435
    LINXY(__NR_close_range,       sys_close_range),      // 436
    LINXY(__NR_openat2,           sys_openat2),          // 437
-
-
+   LINXY(__NR_pidfd_getfd,       sys_pidfd_getfd),      // 438
    LINX_(__NR_faccessat2,       sys_faccessat2),       // 439
 
    LINXY(__NR_epoll_pwait2,      sys_epoll_pwait2),     // 441
index 542382b5330f0b011fee9a801faf4d3c72190a6c..1bd4066703d83c1c1fbb5e1bf07be7f94142436c 100644 (file)
@@ -43,7 +43,7 @@
 #define __NR_clone3            435
 #define __NR_close_range       436
 #define __NR_openat2        437
-
+#define __NR_pidfd_getfd       438
 #define __NR_faccessat2                439
 
 #define __NR_epoll_pwait2              441