From: Florian Weimer <fweimer@redhat.com>
To: Christian Brauner <christian.brauner@ubuntu.com>
Cc: "Michael Kerrisk (man-pages)" <mtk.manpages@gmail.com>,
Christian Brauner <christian@brauner.io>,
lkml <linux-kernel@vger.kernel.org>,
linux-man <linux-man@vger.kernel.org>,
Kees Cook <keescook@chromium.org>,
Oleg Nesterov <oleg@redhat.com>, Arnd Bergmann <arnd@arndb.de>,
David Howells <dhowells@redhat.com>,
Pavel Emelyanov <xemul@virtuozzo.com>,
Andrew Morton <akpm@linux-foundation.org>,
Adrian Reber <adrian@lisas.de>, Andrei Vagin <avagin@gmail.com>,
Linux API <linux-api@vger.kernel.org>,
Jann Horn <jannh@google.com>
Subject: Re: For review: documentation of clone3() system call
Date: Thu, 07 Nov 2019 17:10:51 +0100 [thread overview]
Message-ID: <87y2wrbras.fsf@oldenburg2.str.redhat.com> (raw)
In-Reply-To: <20191107151941.dw4gtul5lrtax4se@wittgenstein> (Christian Brauner's message of "Thu, 7 Nov 2019 16:19:43 +0100")
* Christian Brauner:
> I've always been confused by the "..." for the glibc wrapper. The glibc
> prototype in bits/sched.h also looks like this:
>
> extern int clone (int (*__fn) (void *__arg), void *__child_stack, int __flags, void *__arg, ...) __THROW;
>
> The additionl args parent_tid, tls, and child_tid are present in _all_
> clone version in the same order. In fact the glibc wrapper here give the
> illusion that it's parent_tid, tls, child_tid. The underlying syscall
> has a different order parent_tidptr, child_tidptr, tls.
>
> Florian, can you advise what prototype we should mention for the glibc
> clone() wrapper here. I'd like it to be as simple as possible and get
> rid of the ...
> Architectural differences are explained in detail below anyway.
Our header has:
/* Clone current process. */
extern int clone (int (*__fn) (void *__arg), void *__child_stack,
int __flags, void *__arg, ...) __THROW;
I have not checked all assembler implementations. In theory there could
be one that relies on the different calling convention for variadic
functions (e.g., the existence of a parameter save area on POWER). Or
that swaps arguments in some architecure-specific way. 8-(
I don't have much guidance on this matter, sorry. I expect that for
clone3, we'll provide a same-stack variant as well (for fork/vfork-like
usage), which will be much closer to the kernel interface. clone/clone2
doesn't seem very fixable to me at this point.
Thanks,
Florian
WARNING: multiple messages have this Message-ID (diff)
From: Florian Weimer <fweimer@redhat.com>
To: Christian Brauner <christian.brauner@ubuntu.com>
Cc: "Michael Kerrisk \(man-pages\)" <mtk.manpages@gmail.com>,
Christian Brauner <christian@brauner.io>,
lkml <linux-kernel@vger.kernel.org>,
linux-man <linux-man@vger.kernel.org>,
Kees Cook <keescook@chromium.org>,
Oleg Nesterov <oleg@redhat.com>, Arnd Bergmann <arnd@arndb.de>,
David Howells <dhowells@redhat.com>,
Pavel Emelyanov <xemul@virtuozzo.com>,
Andrew Morton <akpm@linux-foundation.org>,
Adrian Reber <adrian@lisas.de>, Andrei Vagin <avagin@gmail.com>,
Linux API <linux-api@vger.kernel.org>,
Jann Horn <jannh@google.com>
Subject: Re: For review: documentation of clone3() system call
Date: Thu, 07 Nov 2019 17:10:51 +0100 [thread overview]
Message-ID: <87y2wrbras.fsf@oldenburg2.str.redhat.com> (raw)
In-Reply-To: <20191107151941.dw4gtul5lrtax4se@wittgenstein> (Christian Brauner's message of "Thu, 7 Nov 2019 16:19:43 +0100")
* Christian Brauner:
> I've always been confused by the "..." for the glibc wrapper. The glibc
> prototype in bits/sched.h also looks like this:
>
> extern int clone (int (*__fn) (void *__arg), void *__child_stack, int __flags, void *__arg, ...) __THROW;
>
> The additionl args parent_tid, tls, and child_tid are present in _all_
> clone version in the same order. In fact the glibc wrapper here give the
> illusion that it's parent_tid, tls, child_tid. The underlying syscall
> has a different order parent_tidptr, child_tidptr, tls.
>
> Florian, can you advise what prototype we should mention for the glibc
> clone() wrapper here. I'd like it to be as simple as possible and get
> rid of the ...
> Architectural differences are explained in detail below anyway.
Our header has:
/* Clone current process. */
extern int clone (int (*__fn) (void *__arg), void *__child_stack,
int __flags, void *__arg, ...) __THROW;
I have not checked all assembler implementations. In theory there could
be one that relies on the different calling convention for variadic
functions (e.g., the existence of a parameter save area on POWER). Or
that swaps arguments in some architecure-specific way. 8-(
I don't have much guidance on this matter, sorry. I expect that for
clone3, we'll provide a same-stack variant as well (for fork/vfork-like
usage), which will be much closer to the kernel interface. clone/clone2
doesn't seem very fixable to me at this point.
Thanks,
Florian
next prev parent reply other threads:[~2019-11-07 16:10 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-25 16:59 For review: documentation of clone3() system call Michael Kerrisk (man-pages)
2019-10-25 17:07 ` Christian Brauner
2019-11-07 12:26 ` Michael Kerrisk (man-pages)
2019-10-26 2:28 ` G. Branden Robinson
2019-10-31 6:06 ` Michael Kerrisk (man-pages)
2019-10-28 15:12 ` Jann Horn
2019-10-28 17:21 ` Christian Brauner
2019-10-28 19:09 ` Jann Horn
2019-10-29 11:27 ` Christian Brauner
2019-10-29 14:26 ` Christian Brauner
2019-10-29 14:26 ` Christian Brauner
2019-10-29 14:36 ` Florian Weimer
2019-10-29 16:04 ` Christian Brauner
2019-10-29 15:20 ` Jann Horn
2019-10-29 16:05 ` Christian Brauner
2019-11-07 15:19 ` Christian Brauner
2019-11-07 16:10 ` Florian Weimer [this message]
2019-11-07 16:10 ` Florian Weimer
2019-11-09 8:09 ` Michael Kerrisk (man-pages)
2019-11-09 16:53 ` Christian Brauner
2019-11-11 9:02 ` Michael Kerrisk (man-pages)
2019-11-11 11:36 ` Christian Brauner
2019-11-11 19:56 ` Michael Kerrisk (man-pages)
2019-11-11 14:55 ` Jann Horn
2019-11-11 16:58 ` Theodore Y. Ts'o
2019-11-11 20:24 ` Jann Horn
2019-11-12 23:03 ` Kees Cook
2019-11-14 12:15 ` Michael Kerrisk (man-pages)
2019-11-14 12:29 ` Christian Brauner
2019-11-11 15:03 ` Florian Weimer
2019-11-11 15:03 ` Florian Weimer
2019-11-11 15:15 ` Jann Horn
2019-11-11 15:20 ` Florian Weimer
2019-11-11 15:20 ` Florian Weimer
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87y2wrbras.fsf@oldenburg2.str.redhat.com \
--to=fweimer@redhat.com \
--cc=adrian@lisas.de \
--cc=akpm@linux-foundation.org \
--cc=arnd@arndb.de \
--cc=avagin@gmail.com \
--cc=christian.brauner@ubuntu.com \
--cc=christian@brauner.io \
--cc=dhowells@redhat.com \
--cc=jannh@google.com \
--cc=keescook@chromium.org \
--cc=linux-api@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-man@vger.kernel.org \
--cc=mtk.manpages@gmail.com \
--cc=oleg@redhat.com \
--cc=xemul@virtuozzo.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.