// Linux-specific (new in Linux 5.9)
DECL_TEMPLATE(linux, sys_close_range);
+// Linux-specific (new in Linux 5.14)
+DECL_TEMPLATE(linux, sys_memfd_secret);
+
/* ---------------------------------------------------------------------
Wrappers for sockets and ipc-ery. These are split into standalone
procedures because x86-linux hides them inside multiplexors
LINXY(__NR_close_range, sys_close_range), // 436
LINX_(__NR_faccessat2, sys_faccessat2), // 439
+
+ LINXY(__NR_memfd_secret, sys_memfd_secret), // 447
};
SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
LINXY(__NR_close_range, sys_close_range), // 436
LINX_(__NR_faccessat2, sys_faccessat2), // 439
+
+ LINXY(__NR_memfd_secret, sys_memfd_secret), // 447
};
}
}
+PRE(sys_memfd_secret)
+{
+ PRINT("sys_memfd_secret ( %#" FMT_REGWORD "x )", ARG1);
+ PRE_REG_READ1(int, "memfd_secret", unsigned int, flags);
+}
+
+POST(sys_memfd_secret)
+{
+ vg_assert(SUCCESS);
+ if (!ML_(fd_allowed)(RES, "memfd_secret", tid, True)) {
+ VG_(close)(RES);
+ SET_STATUS_Failure( VKI_EMFILE );
+ } else {
+ if (VG_(clo_track_fds))
+ ML_(record_fd_open_nameless)(tid, RES);
+ }
+}
+
PRE(sys_membarrier)
{
PRINT("sys_membarrier ( %#" FMT_REGWORD "x )", ARG1);
LINXY(__NR_close_range, sys_close_range), // 436
LINX_(__NR_faccessat2, sys_faccessat2), // 439
+
+ LINXY(__NR_memfd_secret, sys_memfd_secret), // 447
};
SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
#define __NR_faccessat2 439
+#define __NR_memfd_secret 447
+
#endif