<div dir="ltr"><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Aug 1, 2018 at 4:17 PM, Eddie.Horng <span dir="ltr"><<a href="mailto:eddie.horng@mediatek.com" target="_blank">eddie.horng@mediatek.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
Exercise the execveat() syscall to verify an executable is opened then<br>
unlinked can be executed.<br>
<br>
The regression is introduced from 8db6c34f1dbc ("Introduce v3 namespaced<br>
file capabilities"). Overlayfs and possibly other networking filesystems<br>
unhash the dentry on unlink, fail on this test with above change.<br>
<br>
Signed-off-by: Eddie Horng <<a href="mailto:eddie.horng@mediatek.com" target="_blank">eddie.horng@mediatek.com</a>><br>
---<br>
Changes in v2:<br>
 - use resource file for TEST_APP<br>
 - pass environ to execveat()<br>
 - specific min kernel version 3.19.0 to make sure execveat is supported<br>
 - add needs_ipc_path = 1<br>
 - execveat_child print TPASS to propagate result to parent<br>
---<br>
 <a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a>                                       |   1 +<br>
 include/lapi/syscalls/<a href="http://arm.in" rel="noreferrer" target="_blank">arm.in</a>                       |   1 +<br>
 include/lapi/syscalls/<a href="http://i386.in" rel="noreferrer" target="_blank">i386.in</a><wbr>                      |   1 +<br>
 include/lapi/syscalls/<a href="http://s390.in" rel="noreferrer" target="_blank">s390.in</a><wbr>                      |   1 +<br>
 include/lapi/syscalls/<a href="http://x86_64.in" rel="noreferrer" target="_blank">x86_64.<wbr>in</a>                    |   1 +<br></blockquote><div><br></div><div class="gmail_default" style="font-size:small">why not adding other arches?</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default">$ git grep __NR_execveat </div><div class="gmail_default">alpha/include/uapi/asm/unistd.<wbr>h:#define __NR_execveat                   513</div><div class="gmail_default">arm64/include/asm/unistd32.h:#<wbr>define __NR_execveat 387</div><div class="gmail_default">arm64/include/asm/unistd32.h:_<wbr>_SYSCALL(__NR_execveat, compat_sys_execveat)</div><div class="gmail_default">ia64/include/uapi/asm/unistd.h<wbr>:#define __NR_execveat                    1342</div><div class="gmail_default">m68k/include/uapi/asm/unistd.h<wbr>:#define __NR_execveat            355</div><div class="gmail_default">microblaze/include/uapi/asm/un<wbr>istd.h:#define __NR_execveat              388</div><div class="gmail_default">mips/include/uapi/asm/unistd.h<wbr>:#define __NR_execveat                    (__NR_Linux + 356)</div><div class="gmail_default">mips/include/uapi/asm/unistd.h<wbr>:#define __NR_execveat                    (__NR_Linux + 316)</div><div class="gmail_default">mips/include/uapi/asm/unistd.h<wbr>:#define __NR_execveat                    (__NR_Linux + 320)</div><div class="gmail_default">parisc/include/uapi/asm/unistd<wbr>.h:#define __NR_execveat          (__NR_Linux + 342)</div><div class="gmail_default">powerpc/include/uapi/asm/unist<wbr>d.h:#define __NR_execveat         362</div><div class="gmail_default">sh/include/uapi/asm/unistd_32.<wbr>h:#define __NR_execveat           376</div><div class="gmail_default">sh/include/uapi/asm/unistd_64.<wbr>h:#define __NR_execveat           387</div><div class="gmail_default">sparc/include/uapi/asm/unistd.<wbr>h:#define __NR_execveat           350</div><div class="gmail_default">x86/ia32/audit.c:       case __NR_execveat:</div><div class="gmail_default">x86/kernel/audit_64.c:  case __NR_execveat:</div><div class="gmail_default">xtensa/include/uapi/asm/unistd<wbr>.h:#define __NR_execveat                          341</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small"></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
 m4/ltp-execveat.m4                                 |  25 ++++<br>
 testcases/kernel/syscalls/exe<wbr>cveat/.gitignore      |   2 +<br>
 testcases/kernel/syscalls/exe<wbr>cveat/Makefile        |  23 ++++<br>
 testcases/kernel/syscalls/exe<wbr>cveat/execveat.h      |  42 +++++++<br>
 testcases/kernel/syscalls/exe<wbr>cveat/execveat01.c    | 128 +++++++++++++++++++++<br>
 .../kernel/syscalls/execveat/<wbr>execveat_child.c      |  41 +++++++<br>
 11 files changed, 266 insertions(+)<br>
 create mode 100644 m4/ltp-execveat.m4<br>
 create mode 100644 testcases/kernel/syscalls/exec<wbr>veat/.gitignore<br>
 create mode 100644 testcases/kernel/syscalls/exec<wbr>veat/Makefile<br>
 create mode 100644 testcases/kernel/syscalls/exec<wbr>veat/execveat.h<br>
 create mode 100644 testcases/kernel/syscalls/exec<wbr>veat/execveat01.c<br>
 create mode 100644 testcases/kernel/syscalls/exec<wbr>veat/execveat_child.c<br>
<br>
diff --git a/<a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a> b/<a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a><br>
index 9208f1c6c..373d72689 100644<br>
--- a/<a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a><br>
+++ b/<a href="http://configure.ac" rel="noreferrer" target="_blank">configure.ac</a><br>
@@ -196,6 +196,7 @@ LTP_CHECK_FSTATAT<br>
 LTP_CHECK_MKNODAT<br>
 LTP_CHECK_READLINKAT<br>
 LTP_CHECK_OPENAT<br>
+LTP_CHECK_EXECVEAT<br>
 LTP_CHECK_RENAMEAT<br>
 LTP_CHECK_RENAMEAT2<br>
 LTP_CHECK_FALLOCATE<br>
diff --git a/include/lapi/syscalls/<a href="http://arm.in" rel="noreferrer" target="_blank">arm.in</a> b/include/lapi/syscalls/<a href="http://arm.in" rel="noreferrer" target="_blank">arm.in</a><br>
index 71a4b713d..c44adcd7e 100644<br>
--- a/include/lapi/syscalls/<a href="http://arm.in" rel="noreferrer" target="_blank">arm.in</a><br>
+++ b/include/lapi/syscalls/<a href="http://arm.in" rel="noreferrer" target="_blank">arm.in</a><br>
@@ -340,4 +340,5 @@ sched_getattr (__NR_SYSCALL_BASE+381)<br>
 renameat2 (__NR_SYSCALL_BASE+382)<br>
 getrandom (__NR_SYSCALL_BASE+384)<br>
 memfd_create (__NR_SYSCALL_BASE+385)<br>
+execveat (__NR_SYSCALL_BASE+387)<br>
 copy_file_range (__NR_SYSCALL_BASE+391)<br>
diff --git a/include/lapi/syscalls/<a href="http://i386.in" rel="noreferrer" target="_blank">i386.i<wbr>n</a> b/include/lapi/syscalls/<a href="http://i386.in" rel="noreferrer" target="_blank">i386.i<wbr>n</a><br>
index 0f9601472..19f0148fe 100644<br>
--- a/include/lapi/syscalls/<a href="http://i386.in" rel="noreferrer" target="_blank">i386.i<wbr>n</a><br>
+++ b/include/lapi/syscalls/<a href="http://i386.in" rel="noreferrer" target="_blank">i386.i<wbr>n</a><br>
@@ -340,4 +340,5 @@ sched_getattr 352<br>
 renameat2 354<br>
 getrandom 355<br>
 memfd_create 356<br>
+execveat 358<br>
 copy_file_range 377<br>
diff --git a/include/lapi/syscalls/<a href="http://s390.in" rel="noreferrer" target="_blank">s390.i<wbr>n</a> b/include/lapi/syscalls/<a href="http://s390.in" rel="noreferrer" target="_blank">s390.i<wbr>n</a><br>
index 98c861f36..d95b282f8 100644<br>
--- a/include/lapi/syscalls/<a href="http://s390.in" rel="noreferrer" target="_blank">s390.i<wbr>n</a><br>
+++ b/include/lapi/syscalls/<a href="http://s390.in" rel="noreferrer" target="_blank">s390.i<wbr>n</a><br>
@@ -331,4 +331,5 @@ sched_getattr 346<br>
 renameat2 347<br>
 getrandom 349<br>
 memfd_create 350<br>
+execveat 354<br>
 copy_file_range 375<br>
diff --git a/include/lapi/syscalls/<a href="http://x86_64.in" rel="noreferrer" target="_blank">x86_64<wbr>.in</a> b/include/lapi/syscalls/<a href="http://x86_64.in" rel="noreferrer" target="_blank">x86_64<wbr>.in</a><br>
index 89db79404..7907c3108 100644<br>
--- a/include/lapi/syscalls/<a href="http://x86_64.in" rel="noreferrer" target="_blank">x86_64<wbr>.in</a><br>
+++ b/include/lapi/syscalls/<a href="http://x86_64.in" rel="noreferrer" target="_blank">x86_64<wbr>.in</a><br>
@@ -307,4 +307,5 @@ sched_getattr 315<br>
 renameat2 316<br>
 getrandom 318<br>
 memfd_create 319<br>
+execveat 322<br>
 copy_file_range 326<br>
diff --git a/m4/ltp-execveat.m4 b/m4/ltp-execveat.m4<br>
new file mode 100644<br>
index 000000000..8cb614715<br>
--- /dev/null<br>
+++ b/m4/ltp-execveat.m4<br>
@@ -0,0 +1,25 @@<br>
+dnl<br>
+dnl Copyright (c) Linux Test Project, 2014<br>
+dnl<br>
+dnl This program is free software;  you can redistribute it and/or modify<br>
+dnl it under the terms of the GNU General Public License as published by<br>
+dnl the Free Software Foundation; either version 2 of the License, or<br>
+dnl (at your option) any later version.<br>
+dnl<br>
+dnl This program is distributed in the hope that it will be useful,<br>
+dnl but WITHOUT ANY WARRANTY;  without even the implied warranty of<br>
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See<br>
+dnl the GNU General Public License for more details.<br>
+dnl<br>
+dnl You should have received a copy of the GNU General Public License<br>
+dnl along with this program;  if not, write to the Free Software<br>
+dnl Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA<br>
+dnl<br>
+<br>
+dnl<br>
+dnl LTP_CHECK_EXECVEAT<br>
+dnl ----------------------------<br>
+dnl<br>
+AC_DEFUN([LTP_CHECK_EXECVEAT]<wbr>,[<br>
+AC_CHECK_FUNCS(execveat,,)<br>
+])<br>
diff --git a/testcases/kernel/syscalls/ex<wbr>ecveat/.gitignore b/testcases/kernel/syscalls/ex<wbr>ecveat/.gitignore<br>
new file mode 100644<br>
index 000000000..c0d418603<br>
--- /dev/null<br>
+++ b/testcases/kernel/syscalls/ex<wbr>ecveat/.gitignore<br>
@@ -0,0 +1,2 @@<br>
+/execveat01<br>
+/execveat_child<br>
diff --git a/testcases/kernel/syscalls/ex<wbr>ecveat/Makefile b/testcases/kernel/syscalls/ex<wbr>ecveat/Makefile<br>
new file mode 100644<br>
index 000000000..0bab6dc83<br>
--- /dev/null<br>
+++ b/testcases/kernel/syscalls/ex<wbr>ecveat/Makefile<br>
@@ -0,0 +1,23 @@<br>
+#<br>
+#  Copyright (C) 2018 MediaTek Inc.  All Rights Reserved.<br>
+#<br>
+#  This program is free software;  you can redistribute it and/or modify<br>
+#  it under the terms of the GNU General Public License as published by<br>
+#  the Free Software Foundation; either version 2 of the License, or<br>
+#  (at your option) any later version.<br>
+#<br>
+#  This program is distributed in the hope that it will be useful,<br>
+#  but WITHOUT ANY WARRANTY;  without even the implied warranty of<br>
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See<br>
+#  the GNU General Public License for more details.<br>
+#<br>
+#  You should have received a copy of the GNU General Public License<br>
+#  along with this program;  if not, write to the Free Software<br>
+#  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA<br>
+#<br>
+<br>
+top_srcdir             ?= ../../../..<br>
+<br>
+include $(top_srcdir)/include/mk/<a href="http://testcases.mk" rel="noreferrer" target="_blank">testc<wbr>ases.mk</a><br>
+<br>
+include $(top_srcdir)/include/mk/<a href="http://generic_leaf_target.mk" rel="noreferrer" target="_blank">gener<wbr>ic_leaf_target.mk</a><br>
diff --git a/testcases/kernel/syscalls/ex<wbr>ecveat/execveat.h b/testcases/kernel/syscalls/ex<wbr>ecveat/execveat.h<br>
new file mode 100644<br>
index 000000000..53c8be8a5<br>
--- /dev/null<br>
+++ b/testcases/kernel/syscalls/ex<wbr>ecveat/execveat.h<br>
@@ -0,0 +1,42 @@<br>
+/*<br>
+ * Copyright (C) 2018 MediaTek Inc.  All Rights Reserved.<br>
+ *<br>
+ * This program is free software; you can redistribute it and/or modify it<br>
+ * under the terms of version 2 or any later of the GNU General Public License<br>
+ * as published by the Free Software Foundation.<br>
+ *<br>
+ * This program is distributed in the hope that it would be useful, but<br>
+ * WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.<br>
+ *<br>
+ * Further, this software is distributed without any warranty that it is<br>
+ * free of the rightful claim of any third person regarding infringement<br>
+ * or the like.  Any license provided herein, whether implied or<br>
+ * otherwise, applies only to this software file.  Patent licenses, if<br>
+ * any, provided herein do not apply to combinations of this program with<br>
+ * other software, or any other product whatsoever.<br>
+ *<br>
+ * You should have received a copy of the GNU General Public License along<br>
+ * with this program; if not, write the Free Software Foundation, Inc.,<br>
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.<br>
+ *<br>
+ */<br>
+<br>
+#ifndef EXECVEAT_H<br>
+#define EXECVEAT_H<br>
+<br>
+#include <sys/types.h><br>
+#include "config.h"<br>
+#include "lapi/syscalls.h"<br>
+<br>
+#if !defined(HAVE_EXECVEAT)<br>
+int execveat(int dirfd, const char *pathname,<br>
+                       char *const argv[], char *const envp[],<br>
+                       int flags)<br>
+{<br>
+       return tst_syscall(__NR_execveat, dirfd, pathname, argv, envp, flags);<br>
+}<br>
+#endif<br>
+<br>
+<br>
+#endif /* EXECVEAT_H */<br>
diff --git a/testcases/kernel/syscalls/ex<wbr>ecveat/execveat01.c b/testcases/kernel/syscalls/ex<wbr>ecveat/execveat01.c<br>
new file mode 100644<br>
index 000000000..768b196d3<br>
--- /dev/null<br>
+++ b/testcases/kernel/syscalls/ex<wbr>ecveat/execveat01.c<br>
@@ -0,0 +1,128 @@<br>
+/*<br>
+ * Copyright (C) 2018 MediaTek Inc.  All Rights Reserved.<br>
+ *<br>
+ * This program is free software; you can redistribute it and/or modify it<br>
+ * under the terms of version 2 or any later of the GNU General Public License<br>
+ * as published by the Free Software Foundation.<br>
+ *<br>
+ * This program is distributed in the hope that it would be useful, but<br>
+ * WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.<br>
+ *<br>
+ * Further, this software is distributed without any warranty that it is<br>
+ * free of the rightful claim of any third person regarding infringement<br>
+ * or the like.  Any license provided herein, whether implied or<br>
+ * otherwise, applies only to this software file.  Patent licenses, if<br>
+ * any, provided herein do not apply to combinations of this program with<br>
+ * other software, or any other product whatsoever.<br>
+ *<br>
+ * You should have received a copy of the GNU General Public License along<br>
+ * with this program; if not, write the Free Software Foundation, Inc.,<br>
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.<br>
+ *<br>
+ * Started by Eddie Horng <<a href="mailto:eddie.horng@mediatek.com" target="_blank">eddie.horng@mediatek.com</a>><br>
+ *<br>
+ * DESCRIPTION<br>
+ *     Check if an unlinked executable can run in overlayfs mount.<br>
+ *     The regression is introduced from 8db6c34f1dbc ("Introduce v3<br>
+ *     namespaced file capabilities"). in security/commoncap.c,<br>
+ *     cap_inode_getsecurity() use d_find_alias() cause unhashed dentry<br>
+ *     can't be found. The solution could use d_find_any_alias() instead of<br>
+ *     d_find_alias().<br>
+ *<br>
+ *     From kernel 4.14, this case is expected fails, execveat shell<br>
+ *     return EINVAL.<br>
+ *<br>
+ */<br>
+<br>
+#define _GNU_SOURCE<br>
+#include "config.h"<br>
+<br>
+#include <stdio.h><br>
+#include <stdlib.h><br>
+#include <sys/stat.h><br>
+#include <sys/types.h><br>
+#include <errno.h><br>
+#include <string.h><br>
+#include <sys/syscall.h><br>
+#include <sys/mount.h><br>
+#include <fcntl.h><br>
+#include "tst_test.h"<br>
+#include "execveat.h"<br>
+<br>
+#define OVL_MNT "ovl"<br>
+#define TEST_APP "execveat_child"<br>
+#define TEST_FILE_PATH OVL_MNT"/"TEST_APP<br>
+<br>
+static int ovl_mounted;<br>
+<br>
+static void do_child(void)<br>
+{<br>
+       char *argv[2] = {TEST_FILE_PATH, NULL};<br>
+       int fd;<br>
+<br>
+       SAFE_CP(TEST_APP, TEST_FILE_PATH);<br>
+<br>
+       fd = SAFE_OPEN(TEST_FILE_PATH, O_PATH);<br>
+       SAFE_UNLINK(TEST_FILE_PATH);<br>
+<br>
+       TEST(execveat(fd, "", argv, environ, AT_EMPTY_PATH));<br></blockquote><div><br></div><div><div class="gmail_default" style="font-size:small">Shouldn't we <span style="font-size:12.8px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">handle EINVAL here? As the comment says from kernel-4.14,</span></div><div class="gmail_default" style="font-size:small"><span style="font-size:12.8px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline">this case is expected to fail with EINVAL.</span></div><div class="gmail_default"><div style="font-size:small"><br></div></div><div class="gmail_default" style="font-size:small"><span style="font-size:12.8px;background-color:rgb(255,255,255);text-decoration-style:initial;text-decoration-color:initial;float:none;display:inline"><div>something maybe like:</div><div>-----------------------------</div></span></div></div><div><div class="gmail_default" style="font-size:small"><span style="white-space:pre-wrap">       </span>if (TST_RET == -1) {</div><div class="gmail_default"><span style="white-space:pre-wrap">             </span>if (TST_ERR == EINVAL)</div><div class="gmail_default"><span style="white-space:pre-wrap">                   </span>tst_res(TCONF, "execveat() return EINVAL as we expected");</div><div class="gmail_default"><span style="white-space:pre-wrap">             </span>else</div><div class="gmail_default"><span style="white-space:pre-wrap">                     </span>tst_res(TFAIL | TERRNO, "execveat() returned unexpected errno");</div><div class="gmail_default"><span style="white-space:pre-wrap">       </span>} else {</div><div class="gmail_default"><span style="white-space:pre-wrap">         </span>tst_res(TFAIL, "On success, execveat() shouldn't return");</div><div class="gmail_default"><span style="white-space:pre-wrap"> </span>}</div><div class="gmail_default" style="font-size:small"></div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
+       tst_res(TFAIL | TERRNO, "execveat() returned unexpected errno");<br>
+}<br>
+<br>
+static void verify_execveat(void)<br>
+{<br>
+       pid_t pid;<br>
+<br>
+       pid = SAFE_FORK();<br>
+       if (pid == 0) {<br>
+               do_child();<br>
+               exit(1);<br>
+       }<br>
+       SAFE_WAITPID(pid, NULL, 0);<br>
+}<br>
+<br>
+static void setup(void)<br>
+{<br>
+       int ret;<br>
+<br>
+       /* Setup an overlay mount with lower file */<br>
+       SAFE_MKDIR("lower", 0755);<br>
+       SAFE_MKDIR("upper", 0755);<br>
+       SAFE_MKDIR("work", 0755);<br>
+       SAFE_MKDIR(OVL_MNT, 0755);<br>
+       ret = mount("overlay", OVL_MNT, "overlay", 0,<br>
+                   "lowerdir=lower,upperdir=uppe<wbr>r,workdir=work");<br>
+       if (ret < 0) {<br>
+               if (errno == ENODEV) {<br>
+                       tst_brk(TCONF,<br>
+                               "overlayfs is not configured in this kernel.");<br>
+               }<br>
+               tst_brk(TBROK | TERRNO, "overlayfs mount failed");<br>
+       }<br>
+       ovl_mounted = 1;<br>
+}<br>
+<br>
+static void cleanup(void)<br>
+{<br>
+       if (ovl_mounted)<br>
+               SAFE_UMOUNT(OVL_MNT);<br>
+}<br>
+<br>
+static const char *const resource_files[] = {<br>
+       TEST_APP,<br>
+       NULL,<br>
+};<br>
+<br>
+static struct tst_test test = {<br>
+       .needs_root = 1,<br>
+       .needs_tmpdir = 1,<br>
+       .forks_child = 1,<br>
+       .needs_ipc_path = 1,<br>
+       .setup = setup,<br>
+       .cleanup = cleanup,<br>
+       .test_all = verify_execveat,<br>
+       .resource_files = resource_files,<br>
+       .min_kver = "3.19.0",<br>
+};<br>
+<br>
diff --git a/testcases/kernel/syscalls/ex<wbr>ecveat/execveat_child.c b/testcases/kernel/syscalls/ex<wbr>ecveat/execveat_child.c<br>
new file mode 100644<br>
index 000000000..68fcd1325<br>
--- /dev/null<br>
+++ b/testcases/kernel/syscalls/ex<wbr>ecveat/execveat_child.c<br>
@@ -0,0 +1,41 @@<br>
+/*<br>
+ * Copyright (C) 2018 MediaTek Inc.  All Rights Reserved.<br>
+ *<br>
+ * This program is free software; you can redistribute it and/or modify it<br>
+ * under the terms of version 2 or any later of the GNU General Public License<br>
+ * as published by the Free Software Foundation.<br>
+ *<br>
+ * This program is distributed in the hope that it would be useful, but<br>
+ * WITHOUT ANY WARRANTY; without even the implied warranty of<br>
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.<br>
+ *<br>
+ * Further, this software is distributed without any warranty that it is<br>
+ * free of the rightful claim of any third person regarding infringement<br>
+ * or the like.  Any license provided herein, whether implied or<br>
+ * otherwise, applies only to this software file.  Patent licenses, if<br>
+ * any, provided herein do not apply to combinations of this program with<br>
+ * other software, or any other product whatsoever.<br>
+ *<br>
+ * You should have received a copy of the GNU General Public License along<br>
+ * with this program; if not, write the Free Software Foundation, Inc.,<br>
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.<br>
+ *<br>
+ */<br>
+<br>
+/*<br>
+ * execveat_child.c<br>
+ * dummy program which is used by execveat01.c testcase<br>
+ */<br>
+<br>
+<br>
+#define TST_NO_DEFAULT_MAIN<br>
+#include "tst_test.h"<br>
+<br>
+<br>
+int main(void)<br>
+{<br>
+       tst_reinit();<br>
+       tst_res(TPASS, "execveat_child run as expected");<br>
+       return 0;<br>
+}<br>
+<br>
<span class="m_4007829933816796859gmail-m_-5240425730619368940gmail-HOEnZb"><font color="#888888">-- <br>
2.12.5<br>
<br>
<br>
<br>
<br>
-- <br>
Mailing list info: <a href="https://lists.linux.it/listinfo/ltp" rel="noreferrer" target="_blank">https://lists.linux.it/listinf<wbr>o/ltp</a><br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="m_4007829933816796859gmail-m_-5240425730619368940gmail_signature"><div dir="ltr"><div>Regards,<br></div><div>Li Wang<br></div></div></div>
</div></div>