[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