[systemd-devel] [PATCH] nspawn: fix invocation of the raw clone() system call on s390 and cris
Ken Werner
ken at linux.vnet.ibm.com
Sun Dec 14 23:01:21 PST 2014
From: Ken Werner <ken at linux.vnet.ibm.com>
Since the order of the first and second arguments of the raw clone()
system call is reversed on s390 and cris it needs to be invoked differently.
Signed-off-by: Ken Werner <ken at linux.vnet.ibm.com>
---
src/nspawn/nspawn.c | 8 ++++++++
1 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
index 9ca53cd..9bfd7a5 100644
--- a/src/nspawn/nspawn.c
+++ b/src/nspawn/nspawn.c
@@ -3133,9 +3133,17 @@ int main(int argc, char *argv[]) {
goto finish;
}
+#if defined(__s390__) || defined(__CRIS)
+ /* On s390 and cris the order of the first and second arguments
+ * of the raw clone() system call is reversed. */
+ pid = syscall(__NR_clone, NULL, SIGCHLD|CLONE_NEWNS|
+ (arg_share_system ? 0 : CLONE_NEWIPC|CLONE_NEWPID|CLONE_NEWUTS)|
+ (arg_private_network ? CLONE_NEWNET : 0));
+#else
pid = syscall(__NR_clone, SIGCHLD|CLONE_NEWNS|
(arg_share_system ? 0 : CLONE_NEWIPC|CLONE_NEWPID|CLONE_NEWUTS)|
(arg_private_network ? CLONE_NEWNET : 0), NULL);
+#endif
if (pid < 0) {
if (errno == EINVAL)
r = log_error_errno(errno, "clone() failed, do you have namespace support enabled in your kernel? (You need UTS, IPC, PID and NET namespacing built in): %m");
--
1.7.1
More information about the systemd-devel
mailing list