[systemd-devel] [PATCH] nspawn: fix invocation of the raw clone() system call on s390 and cris

Ken Werner ken at linux.vnet.ibm.com
Tue Dec 16 08:40:18 PST 2014


On 12/15/2014 06:27 PM, Lennart Poettering wrote:
> On Mon, 15.12.14 08:01, Ken Werner (ken at linux.vnet.ibm.com) wrote:
>
>> 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>
>
> Hmm, I'd prefer if we could move the definition of this syscall
> wrapper into missing.h, and do the per-arch magic there, like we do
> for all the other syscalls missing from glibc. Maybe call the function
> "raw_clone()" there or so.

Alright, I'll create and post an updated patch.

> Alternatively we could move to the glibc-provided wrapper, but I think
> it's nastier to use, since it requires a stack parameter to be
> specified.
>
>> @@ -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
>>
>> _______________________________________________
>> systemd-devel mailing list
>> systemd-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/systemd-devel
>
>
> Lennart

Regards,
Ken



More information about the systemd-devel mailing list