[RFC PATCH v1 04/13] exec: add spawn template UAPI definitions

Li Chen <[email protected]>
Newsgroups org.kernel.vger.linux-api,org.kernel.vger.linux-arch,org.kernel.vger.linux-doc,org.kernel.vger.linux-fsdevel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-kselftest,org.kvack.linux-mm
Message-ID <[email protected]>
Add the userspace ABI structures and flags for creating a spawn
template and spawning a process from it. The ABI carries argv, envp,
and per-spawn fd actions while leaving policy decisions in userspace.

Signed-off-by: Li Chen <[email protected]>
---
 MAINTAINERS                         |  1 +
 include/uapi/linux/spawn_template.h | 62 +++++++++++++++++++++++++++++
 2 files changed, 63 insertions(+)
 create mode 100644 include/uapi/linux/spawn_template.h

diff --git a/MAINTAINERS b/MAINTAINERS
index 3dd58a16f06a9..d7b1191e33ca0 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -9739,6 +9739,7 @@ F:	include/linux/elf.h
 F:	include/uapi/linux/auxvec.h
 F:	include/uapi/linux/binfmts.h
 F:	include/uapi/linux/elf.h
+F:	include/uapi/linux/spawn_template.h
 F:	kernel/fork.c
 F:	mm/vma_exec.c
 F:	tools/testing/selftests/exec/
diff --git a/include/uapi/linux/spawn_template.h b/include/uapi/linux/spawn_template.h
new file mode 100644
index 0000000000000..84f026fdf9090
--- /dev/null
+++ b/include/uapi/linux/spawn_template.h
@@ -0,0 +1,62 @@
+/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
+#ifndef _UAPI_LINUX_SPAWN_TEMPLATE_H
+#define _UAPI_LINUX_SPAWN_TEMPLATE_H
+
+#include <linux/openat2.h>
+#include <linux/types.h>
+
+#define SPAWN_TEMPLATE_CREATE_CLOEXEC		(1ULL << 0)
+#define SPAWN_TEMPLATE_SPAWN_INHERIT_FDS	(1ULL << 0)
+
+enum spawn_template_action_type {
+	SPAWN_TEMPLATE_ACTION_CLOSE = 0,
+	SPAWN_TEMPLATE_ACTION_DUP2 = 1,
+	SPAWN_TEMPLATE_ACTION_FCHDIR = 2,
+	SPAWN_TEMPLATE_ACTION_OPEN = 3,
+	SPAWN_TEMPLATE_ACTION_CLOSE_RANGE = 4,
+	SPAWN_TEMPLATE_ACTION_SIGMASK = 5,
+	SPAWN_TEMPLATE_ACTION_SIGDEFAULT = 6,
+};
+
+struct spawn_template_action {
+	__u32 type;
+	__u32 flags;
+	__s32 fd;
+	__s32 newfd;
+	__aligned_u64 arg;
+};
+
+struct spawn_template_open {
+	__aligned_u64 path;
+	struct open_how how;
+};
+
+struct spawn_template_sigset {
+	__aligned_u64 sigset;
+	__u64 sigsetsize;
+};
+
+struct spawn_template_create_args {
+	__aligned_u64 flags;
+	__s32 execfd;
+	__u32 exec_flags;
+	__aligned_u64 filename;
+	__aligned_u64 actions;
+	__aligned_u64 actions_len;
+	__aligned_u64 reserved[4];
+};
+
+struct spawn_template_spawn_args {
+	__aligned_u64 flags;
+	__aligned_u64 pidfd;
+	__aligned_u64 argv;
+	__aligned_u64 envp;
+	__aligned_u64 actions;
+	__aligned_u64 actions_len;
+	__aligned_u64 reserved[4];
+};
+
+#define SPAWN_TEMPLATE_CREATE_ARGS_SIZE_VER0	72
+#define SPAWN_TEMPLATE_SPAWN_ARGS_SIZE_VER0	80
+
+#endif /* _UAPI_LINUX_SPAWN_TEMPLATE_H */
-- 
2.52.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.