From: Oleg Nesterov <oleg@redhat.com>
To: Roland McGrath <roland@redhat.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
LKML <linux-kernel@vger.kernel.org>,
linux-mm <linux-mm@kvack.org>,
David Rientjes <rientjes@google.com>,
Andrew Morton <akpm@linux-foundation.org>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
Nick Piggin <npiggin@suse.de>
Subject: Re: uninterruptible CLONE_VFORK (Was: oom: Make coredump interruptible)
Date: Mon, 28 Jun 2010 19:33:06 +0200 [thread overview]
Message-ID: <20100628173306.GA20039@redhat.com> (raw)
In-Reply-To: <20100614191710.18C0E403B2@magilla.sf.frob.com>
On 06/14, Roland McGrath wrote:
>
> > Hmm. Even without debugger, the parent doesn't react to SIGSTOP.
>
> Yes. It's been a long time since I thought about the vfork stuff much.
> But I now recall thinking about the SIGSTOP/SIGTSTP issue too. It does
> seem bad. OTOH, it has lurked there for many years now without complaints.
>
> Note that supporting stop/fatal signals in the normal way means that the
> call has to return and pass the syscall-exit tracing point first. This
> means a change in the order of events seen by a debugger. It also
> complicates the subject of PTRACE_EVENT_VFORK_DONE reports, which today
> happen before syscall-exit or signal stuff is possible. For proper
> stopping in the normal way, the vfork-wait would be restarted via
> sys_restart_syscall or something.
Yes. I was thinking about this too.
The parent can play with real_blocked or saved_sigmask to block all
signals except STOP and KILL, use TASK_INTERRUPTIBLE for wait, and
just return ERESTART each time it gets the signal (it should clear
child->vfork_done if fatal_signal_pending).
We should also check PF_KTHREAD though, there are in kernel users
of CLONE_VFORK.
> Bu the way that happens ordinarily is
> to get all the way back to user mode and reenter with a normal syscall.
> That doesn't touch the user stack itself, but it sure makes one nervous.
me too. Especially because I do not really know how !x86 machines
implement this all.
We should also verify that the exiting/stopping parent can never write
to its ->mm. For example, exit_mm() does put_user(tsk->clear_child_tid).
Fortunately we can rely on PF_SIGNALED flag in this case.
Oleg.
WARNING: multiple messages have this Message-ID (diff)
From: Oleg Nesterov <oleg@redhat.com>
To: Roland McGrath <roland@redhat.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>,
LKML <linux-kernel@vger.kernel.org>,
linux-mm <linux-mm@kvack.org>,
David Rientjes <rientjes@google.com>,
Andrew Morton <akpm@linux-foundation.org>,
KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>,
Nick Piggin <npiggin@suse.de>
Subject: Re: uninterruptible CLONE_VFORK (Was: oom: Make coredump interruptible)
Date: Mon, 28 Jun 2010 19:33:06 +0200 [thread overview]
Message-ID: <20100628173306.GA20039@redhat.com> (raw)
In-Reply-To: <20100614191710.18C0E403B2@magilla.sf.frob.com>
On 06/14, Roland McGrath wrote:
>
> > Hmm. Even without debugger, the parent doesn't react to SIGSTOP.
>
> Yes. It's been a long time since I thought about the vfork stuff much.
> But I now recall thinking about the SIGSTOP/SIGTSTP issue too. It does
> seem bad. OTOH, it has lurked there for many years now without complaints.
>
> Note that supporting stop/fatal signals in the normal way means that the
> call has to return and pass the syscall-exit tracing point first. This
> means a change in the order of events seen by a debugger. It also
> complicates the subject of PTRACE_EVENT_VFORK_DONE reports, which today
> happen before syscall-exit or signal stuff is possible. For proper
> stopping in the normal way, the vfork-wait would be restarted via
> sys_restart_syscall or something.
Yes. I was thinking about this too.
The parent can play with real_blocked or saved_sigmask to block all
signals except STOP and KILL, use TASK_INTERRUPTIBLE for wait, and
just return ERESTART each time it gets the signal (it should clear
child->vfork_done if fatal_signal_pending).
We should also check PF_KTHREAD though, there are in kernel users
of CLONE_VFORK.
> Bu the way that happens ordinarily is
> to get all the way back to user mode and reenter with a normal syscall.
> That doesn't touch the user stack itself, but it sure makes one nervous.
me too. Especially because I do not really know how !x86 machines
implement this all.
We should also verify that the exiting/stopping parent can never write
to its ->mm. For example, exit_mm() does put_user(tsk->clear_child_tid).
Fortunately we can rely on PF_SIGNALED flag in this case.
Oleg.
--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org. For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2010-06-28 17:35 UTC|newest]
Thread overview: 110+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-31 9:33 [PATCH 1/5] oom: select_bad_process: check PF_KTHREAD instead of !mm to skip kthreads KOSAKI Motohiro
2010-05-31 9:33 ` KOSAKI Motohiro
2010-05-31 9:35 ` [PATCH 2/5] oom: select_bad_process: PF_EXITING check should take ->mm into account KOSAKI Motohiro
2010-05-31 9:35 ` KOSAKI Motohiro
2010-05-31 16:43 ` Oleg Nesterov
2010-05-31 16:43 ` Oleg Nesterov
2010-06-01 1:10 ` KOSAKI Motohiro
2010-06-01 1:10 ` KOSAKI Motohiro
2010-06-01 20:18 ` Oleg Nesterov
2010-06-01 20:18 ` Oleg Nesterov
2010-06-02 13:54 ` [PATCH] oom: remove PF_EXITING check completely KOSAKI Motohiro
2010-06-02 13:54 ` KOSAKI Motohiro
2010-06-02 15:54 ` Oleg Nesterov
2010-06-02 15:54 ` Oleg Nesterov
2010-06-02 21:02 ` David Rientjes
2010-06-02 21:02 ` David Rientjes
2010-06-03 4:48 ` KOSAKI Motohiro
2010-06-03 4:48 ` KOSAKI Motohiro
2010-06-03 6:29 ` David Rientjes
2010-06-03 6:29 ` David Rientjes
2010-06-02 13:54 ` [PATCH] oom: Make coredump interruptible KOSAKI Motohiro
2010-06-02 13:54 ` KOSAKI Motohiro
2010-06-02 15:42 ` Oleg Nesterov
2010-06-02 15:42 ` Oleg Nesterov
2010-06-02 17:29 ` Roland McGrath
2010-06-02 17:29 ` Roland McGrath
2010-06-02 17:53 ` Oleg Nesterov
2010-06-02 17:53 ` Oleg Nesterov
2010-06-02 18:58 ` Roland McGrath
2010-06-02 18:58 ` Roland McGrath
2010-06-02 20:38 ` Oleg Nesterov
2010-06-02 20:38 ` Oleg Nesterov
2010-06-03 14:03 ` Oleg Nesterov
2010-06-03 14:03 ` Oleg Nesterov
2010-06-04 10:54 ` KOSAKI Motohiro
2010-06-04 10:54 ` KOSAKI Motohiro
2010-06-04 11:27 ` Oleg Nesterov
2010-06-04 11:27 ` Oleg Nesterov
2010-06-04 11:34 ` Oleg Nesterov
2010-06-04 11:34 ` Oleg Nesterov
2010-06-09 19:53 ` Oleg Nesterov
2010-06-09 19:53 ` Oleg Nesterov
2010-06-09 20:41 ` David Rientjes
2010-06-09 20:41 ` David Rientjes
2010-06-09 21:03 ` Oleg Nesterov
2010-06-09 21:03 ` Oleg Nesterov
2010-06-13 11:24 ` KOSAKI Motohiro
2010-06-13 11:24 ` KOSAKI Motohiro
2010-06-13 15:53 ` Oleg Nesterov
2010-06-13 15:53 ` Oleg Nesterov
2010-06-13 17:13 ` uninterruptible CLONE_VFORK (Was: oom: Make coredump interruptible) Oleg Nesterov
2010-06-13 17:13 ` Oleg Nesterov
2010-06-14 0:56 ` Roland McGrath
2010-06-14 0:56 ` Roland McGrath
2010-06-14 16:33 ` Oleg Nesterov
2010-06-14 16:33 ` Oleg Nesterov
2010-06-14 19:17 ` Roland McGrath
2010-06-14 19:17 ` Roland McGrath
2010-06-28 17:33 ` Oleg Nesterov [this message]
2010-06-28 17:33 ` Oleg Nesterov
2010-06-28 18:04 ` Roland McGrath
2010-06-28 18:04 ` Roland McGrath
2010-06-14 0:36 ` [PATCH] oom: Make coredump interruptible Roland McGrath
2010-06-14 0:36 ` Roland McGrath
2010-06-14 0:26 ` Roland McGrath
2010-06-14 0:26 ` Roland McGrath
2010-06-01 20:39 ` [PATCH 2/5] oom: select_bad_process: PF_EXITING check should take ->mm into account David Rientjes
2010-06-01 20:39 ` David Rientjes
2010-05-31 9:36 ` [PATCH 3/5] oom: introduce find_lock_task_mm() to fix !mm false positives KOSAKI Motohiro
2010-05-31 9:36 ` KOSAKI Motohiro
2010-06-01 0:57 ` KAMEZAWA Hiroyuki
2010-06-01 0:57 ` KAMEZAWA Hiroyuki
2010-06-01 20:42 ` David Rientjes
2010-06-01 20:42 ` David Rientjes
2010-06-02 16:05 ` Minchan Kim
2010-06-02 16:05 ` Minchan Kim
2010-05-31 9:37 ` [PATCH 4/5] oom: the points calculation of child processes must use find_lock_task_mm() too KOSAKI Motohiro
2010-05-31 9:37 ` KOSAKI Motohiro
2010-05-31 16:56 ` Oleg Nesterov
2010-05-31 16:56 ` Oleg Nesterov
2010-05-31 23:48 ` KOSAKI Motohiro
2010-05-31 23:48 ` KOSAKI Motohiro
2010-05-31 9:38 ` [PATCH 5/5] oom: __oom_kill_task() " KOSAKI Motohiro
2010-05-31 9:38 ` KOSAKI Motohiro
2010-06-01 1:02 ` KAMEZAWA Hiroyuki
2010-06-01 1:02 ` KAMEZAWA Hiroyuki
2010-06-01 20:44 ` David Rientjes
2010-06-01 20:44 ` David Rientjes
2010-06-01 0:54 ` [PATCH 1/5] oom: select_bad_process: check PF_KTHREAD instead of !mm to skip kthreads KAMEZAWA Hiroyuki
2010-06-01 0:54 ` KAMEZAWA Hiroyuki
2010-06-01 20:36 ` David Rientjes
2010-06-01 20:36 ` David Rientjes
2010-06-01 21:20 ` Oleg Nesterov
2010-06-01 21:20 ` Oleg Nesterov
2010-06-01 21:26 ` David Rientjes
2010-06-01 21:26 ` David Rientjes
2010-06-02 13:54 ` KOSAKI Motohiro
2010-06-02 13:54 ` KOSAKI Motohiro
2010-06-02 21:09 ` David Rientjes
2010-06-02 21:09 ` David Rientjes
2010-06-02 21:33 ` Oleg Nesterov
2010-06-02 21:33 ` Oleg Nesterov
2010-06-02 21:46 ` David Rientjes
2010-06-02 21:46 ` David Rientjes
2010-06-03 14:27 ` Oleg Nesterov
2010-06-03 14:27 ` Oleg Nesterov
2010-06-03 20:11 ` David Rientjes
2010-06-03 20:11 ` David Rientjes
2010-06-02 15:32 ` Minchan Kim
2010-06-02 15:32 ` Minchan Kim
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=20100628173306.GA20039@redhat.com \
--to=oleg@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=kamezawa.hiroyu@jp.fujitsu.com \
--cc=kosaki.motohiro@jp.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=npiggin@suse.de \
--cc=rientjes@google.com \
--cc=roland@redhat.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.