<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>