From: bugzilla-daemon@kernel.org
To: linux-man@vger.kernel.org
Subject: [Bug 215769] man 2 vfork() does not document corner case when PID == 1
Date: Sat, 02 Apr 2022 21:15:58 +0000 [thread overview]
Message-ID: <bug-215769-11311-UkJKWwvI2R@https.bugzilla.kernel.org/> (raw)
In-Reply-To: <bug-215769-11311@https.bugzilla.kernel.org/>
https://bugzilla.kernel.org/show_bug.cgi?id=215769
--- Comment #5 from Alejandro Colomar (man-pages) (alx.manpages@gmail.com) ---
[Added some kernel CCs that may know what's going on]
Hi,
On 3/31/22 09:53, bugzilla-daemon@kernel.org wrote:
> https://bugzilla.kernel.org/show_bug.cgi?id=215769
>
> --- Comment #3 from Коренберг Марк (socketpair@gmail.com) ---
> Hi,
> I appreciate depth of information validation. Actually, you are right.
> vfork()
> DOES work with pid=1 processes. I figured out the cause in my case. In order
> to
> reproduce -- add unshare(CLONE_NEWTIME) just before vfork(). Now, I don't
> know
> if it's a bug in vfork() or in fork(). Yes, both are clone() actually.
>
> In any case, they should either both give EINVAL or both don't fail. But it's
> definitely bug in the kernel around CLONE_NEWTIME.
>
On 3/31/22 10:12, bugzilla-daemon@kernel.org wrote:
> https://bugzilla.kernel.org/show_bug.cgi?id=215769
>
> --- Comment #4 from Коренберг Марк (socketpair@gmail.com) ---
> #define _GNU_SOURCE 1
> #include <stdio.h>
> #include <sched.h>
> #include <stdlib.h>
> #include <unistd.h>
> #include <sys/types.h>
> #include <sys/wait.h>
> #include <err.h>
>
> #ifndef CLONE_NEWTIME
> #define CLONE_NEWTIME 0x00000080
> #endif
>
> int main (void)
> {
> if (unshare (CLONE_NEWTIME)) err (EXIT_FAILURE, "UNSHARE_NEWTIME");
>
> pid_t pid;
> switch (pid=vfork ())
> {
> case 0:
> _exit(0);
> case -1:
> err(EXIT_FAILURE, "vfork BUG");
> default:
> waitpid(pid, NULL, 0);
> }
> return 0;
> }
>
I could reproduce it with the following code. I tried
syscall(SYS_vfork) to make sure it's not a problem in the libc wrapper,
and to make sure I do call vfork(2). If I replace vfork(2) with
fork(2), I don't get the error.
$ cat vfork.c
#define _GNU_SOURCE
#include <err.h>
#include <linux/sched.h>
#include <sched.h>
#include <signal.h>
#include <stdlib.h>
#include <sys/syscall.h>
#include <unistd.h>
int main(void)
{
pid_t pid;
if (unshare(CLONE_NEWTIME) == -1)
err(EXIT_FAILURE, "unshare(2)");
if (signal(SIGCHLD, SIG_IGN) == SIG_ERR)
err(EXIT_FAILURE, "sigaction(2)");
pid = syscall(SYS_vfork);
switch (pid) {
case 0:
errx(EXIT_SUCCESS, "Grandchild exiting normally.");
case -1:
/* If we got here, the report is confirmed. */
err(EXIT_FAILURE, "vfork(2)");
default:
errx(EXIT_SUCCESS, "Child exiting normally.");
}
}
$ cc -Wall -Wextra -Werror vfork.c
$ sudo ./a.out
a.out: vfork(2): Invalid argument
$ grep_syscall_def vfork
kernel/fork.c:2711:
SYSCALL_DEFINE0(vfork)
{
struct kernel_clone_args args = {
.flags = CLONE_VFORK | CLONE_VM,
.exit_signal = SIGCHLD,
};
return kernel_clone(&args);
}
Maybe someone in the kernel can send some patch for the clone(2) and/or
vfork(2) manual pages that explains the reason (if it's intended).
Thanks,
Alex
--
You may reply to this email to add a comment.
You are receiving this mail because:
You are watching the assignee of the bug.
next prev parent reply other threads:[~2022-04-02 21:16 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-03-29 11:02 [Bug 215769] New: man 2 vfork() does not document corner case when PID == 1 bugzilla-daemon
2022-03-30 0:48 ` [Bug 215769] " bugzilla-daemon
2022-03-30 1:00 ` bugzilla-daemon
2022-03-31 7:53 ` bugzilla-daemon
2022-03-31 8:12 ` bugzilla-daemon
2022-04-02 21:15 ` bugzilla-daemon [this message]
2022-04-04 8:05 ` bugzilla-daemon
2022-04-05 11:37 ` bugzilla-daemon
2022-04-05 19:27 ` bugzilla-daemon
2022-04-06 5:44 ` bugzilla-daemon
2022-04-06 8:46 ` bugzilla-daemon
2022-04-06 17:13 ` bugzilla-daemon
2022-04-06 19:22 ` bugzilla-daemon
2022-04-08 10:55 ` [Bug 215769] vfork() returns EINVAL after unshare(CLONE_NEWTIME) bugzilla-daemon
2022-04-08 11:36 ` bugzilla-daemon
2022-04-11 15:36 ` bugzilla-daemon
2022-05-09 10:23 ` bugzilla-daemon
2022-09-06 8:32 ` bugzilla-daemon
2022-10-08 0:25 ` bugzilla-daemon
2022-10-08 18:52 ` bugzilla-daemon
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=bug-215769-11311-UkJKWwvI2R@https.bugzilla.kernel.org/ \
--to=bugzilla-daemon@kernel.org \
--cc=linux-man@vger.kernel.org \
/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.