]> git.ipfire.org Git - thirdparty/valgrind.git/commitdiff
Handle the memfd_create system call.
authorTom Hughes <tom@compton.nu>
Mon, 19 Jan 2015 21:52:44 +0000 (21:52 +0000)
committerTom Hughes <tom@compton.nu>
Mon, 19 Jan 2015 21:52:44 +0000 (21:52 +0000)
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@14875

12 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-ppc32-linux.c
coregrind/m_syswrap/syswrap-ppc64-linux.c
coregrind/m_syswrap/syswrap-s390x-linux.c
coregrind/m_syswrap/syswrap-x86-linux.c

diff --git a/NEWS b/NEWS
index 6f693fbbee65dc41167dff763d134888c169a162..1e6cb3a974c758f2493e60b9c5daf4b13d17e786 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -103,6 +103,7 @@ where XXXXXX is the bug number as listed below.
 342063  wrong format specifier for test mcblocklistsearch in gdbserver_tests
 342221  socket connect false positive uninit memory for unknown af family
 342795  Internal glibc __GI_mempcpy call should be intercepted
+343012  Unhandled syscall 319 (memfd_create)
 n-i-bz  Provide implementations of certain compiler builtins to support
         compilers who may not provide those
 n-i-bz  Old STABS code is still being compiled, but never used. Remove it.
index 22c6c983d9a962393430a67a02a9af4271025c89..4a8d7e17d5b01f14fc5f609d6ea7b8db46f0b5a5 100644 (file)
@@ -285,6 +285,7 @@ DECL_TEMPLATE(linux, sys_fanotify_mark);
 
 // Linux-specific (new in Linux 3.17)
 DECL_TEMPLATE(linux, sys_getrandom);
+DECL_TEMPLATE(linux, sys_memfd_create);
 
 /* ---------------------------------------------------------------------
    Wrappers for sockets and ipc-ery.  These are split into standalone
index ae696b1c30b3ae780cc6fb40154c588c9d64e747..88802fba88e4310f7a2d68f20e65e79f1fbfbb3c 100644 (file)
@@ -1078,8 +1078,8 @@ static SyscallTableEntry syscall_table[] = {
 //   LIN__(__NR_sched_getattr,     sys_ni_syscall),       // 315
 //   LIN__(__NR_renameat2,         sys_ni_syscall),       // 316
 //   LIN__(__NR_seccomp,           sys_ni_syscall),       // 317
-   LINXY(__NR_getrandom,         sys_getrandom)         // 318
-//   LIN__(__NR_memfd_create,      sys_ni_syscall),       // 319
+   LINXY(__NR_getrandom,         sys_getrandom),        // 318
+   LINXY(__NR_memfd_create,      sys_memfd_create)      // 319
 
 //   LIN__(__NR_kexec_file_load,   sys_ni_syscall),       // 320
 //   LIN__(__NR_bpf,               sys_ni_syscall)        // 321
index 4293800602726bbc2f36bfc5c2b400ae3c51d6ea..200b0d177c84c482417788eeb23983125539257b 100644 (file)
@@ -1215,7 +1215,8 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY(__NR_open_by_handle_at, sys_open_by_handle_at),// 371
    LINXY(__NR_clock_adjtime,     sys_clock_adjtime),    // 372
    LINXY(__NR_sendmmsg,          sys_sendmmsg),         // 374
-   LINXY(__NR_getrandom,         sys_getrandom)         // 384
+   LINXY(__NR_getrandom,         sys_getrandom),        // 384
+   LINXY(__NR_memfd_create,      sys_memfd_create)      // 385
 };
 
 
index 56fafac4c3ac002edef4e2affeaa1a9730e75e7d..a72392fd9442da058f1164bd4aaa31e385e3fbe0 100644 (file)
@@ -1037,6 +1037,7 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY(__NR_process_vm_readv,  sys_process_vm_readv),  // 270
    LINX_(__NR_process_vm_writev, sys_process_vm_writev), // 271
    LINXY(__NR_getrandom,         sys_getrandom),         // 278
+   LINXY(__NR_memfd_create,      sys_memfd_create),      // 279
 
 // The numbers below are bogus.  (See comment further down.)
 // When pulling entries above this line, change the numbers
index f0bd3cbbea5c585da16c4bf03c522112bf73ccd6..7c7254515c92a050d1a66e0fa7f3d96d2d31f62b 100644 (file)
@@ -3018,6 +3018,26 @@ POST(sys_getrandom)
    POST_MEM_WRITE( ARG1, ARG2 );
 }
 
+PRE(sys_memfd_create)
+{
+   PRINT("sys_memfd_create ( %#lx, %ld )" , ARG1,ARG2);
+   PRE_REG_READ2(int, "memfd_create",
+                 char *, uname, unsigned int, flags);
+   PRE_MEM_RASCIIZ( "memfd_create(uname)", ARG1 );
+}
+
+POST(sys_memfd_create)
+{
+   vg_assert(SUCCESS);
+   if (!ML_(fd_allowed)(RES, "memfd_create", tid, True)) {
+      VG_(close)(RES);
+      SET_STATUS_Failure( VKI_EMFILE );
+   } else {
+      if (VG_(clo_track_fds))
+         ML_(record_fd_open_nameless)(tid, RES);
+   }
+}
+
 /* ---------------------------------------------------------------------
    utime wrapper
    ------------------------------------------------------------------ */
index bddadd01685526df44832b707efecac0b6e2136f..fa921c1d6ca74f8115056354a246246566e2f89b 100644 (file)
@@ -1118,7 +1118,8 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY (__NR_process_vm_readv,       sys_process_vm_readv),        // 345
    LINX_ (__NR_process_vm_writev,      sys_process_vm_writev),       // 346
    //..
-   LINXY(__NR_getrandom,               sys_getrandom)                // 353
+   LINXY(__NR_getrandom,               sys_getrandom),               // 353
+   LINXY(__NR_memfd_create,            sys_memfd_create)             // 354
 };
 
 SyscallTableEntry* ML_(get_linux_syscall_entry) (UInt sysno)
index c51ab6fb21c4f6759b20d00f8a712b3de2ae342f..f8340ab81ef5d6f557770b03014fad780107d5e0 100644 (file)
@@ -910,7 +910,8 @@ static SyscallTableEntry syscall_main_table[] = {
    LINXY (__NR_clock_adjtime, sys_clock_adjtime),
    LINXY (__NR_process_vm_readv, sys_process_vm_readv),
    LINX_ (__NR_process_vm_writev, sys_process_vm_writev),
-   LINXY(__NR_getrandom, sys_getrandom)
+   LINXY(__NR_getrandom, sys_getrandom),
+   LINXY(__NR_memfd_create, sys_memfd_create)
 };
 
 SyscallTableEntry * ML_(get_linux_syscall_entry) ( UInt sysno )
index 5c058c281570448299372d11a36a1b2a181be210..6b53abe52c1c262829782886fdde736a5a8668f3 100644 (file)
@@ -1258,7 +1258,8 @@ static SyscallTableEntry syscall_table[] = {
    LINXY(__NR_process_vm_readv,  sys_process_vm_readv), // 351
    LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 352
 
-   LINXY(__NR_getrandom,         sys_getrandom)         // 359
+   LINXY(__NR_getrandom,         sys_getrandom),        // 359
+   LINXY(__NR_memfd_create,      sys_memfd_create)      // 360
 };
 
 SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
index c173593439caae6870d032fa1836fbb78a14fe9f..25e0bdecdbdbcd55654b7d1e053be70e0d12d893 100644 (file)
@@ -1157,7 +1157,8 @@ static SyscallTableEntry syscall_table[] = {
    LINXY(__NR_process_vm_readv,  sys_process_vm_readv), // 351
    LINX_(__NR_process_vm_writev, sys_process_vm_writev),// 352
 
-   LINXY(__NR_getrandom,         sys_getrandom)         // 359
+   LINXY(__NR_getrandom,         sys_getrandom),        // 359
+   LINXY(__NR_memfd_create,      sys_memfd_create)      // 360
 };
 
 SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
index 6363e2de79243890fea36654f15fa162412104a5..ca969c870e27c2095464dbff507ac48b8eda286d 100644 (file)
@@ -1050,9 +1050,9 @@ static SyscallTableEntry syscall_table[] = {
 // ?????(__NR_sched_getattr, ),                                       // 346
 // ?????(__NR_renameat2, ),                                           // 347
 // ?????(__NR_seccomp, ),                                             // 348
-   LINXY(__NR_getrandom, sys_getrandom)                               // 349
+   LINXY(__NR_getrandom, sys_getrandom),                              // 349
 
-// ?????(__NR_memfd_create, ),                                        // 350
+   LINXY(__NR_memfd_create, sys_memfd_create)                         // 350
 };
 
 SyscallTableEntry* ML_(get_linux_syscall_entry) ( UInt sysno )
index dcbf4251e3dedc13a70de11992eb51e050f969a2..0e8767933c6fd4355d3e482b9b5312a8a9c08458 100644 (file)
@@ -1821,8 +1821,8 @@ static SyscallTableEntry syscall_table[] = {
 //   LIN__(__NR_renameat2,         sys_ni_syscall),       // 353
 //   LIN__(__NR_seccomp,           sys_ni_syscall),       // 354
 
-   LINXY(__NR_getrandom,         sys_getrandom)         // 355
-//   LIN__(__NR_memfd_create,      sys_ni_syscall),       // 356
+   LINXY(__NR_getrandom,         sys_getrandom),        // 355
+   LINXY(__NR_memfd_create,      sys_memfd_create)      // 356
 //   LIN__(__NR_bpf,               sys_ni_syscall)        // 357
 };