From: Oleg Nesterov <oleg@redhat.com>
To: Neil Horman <nhorman@tuxdriver.com>
Cc: jmoskovc@redhat.com, neilb@suse.de, benh@kernel.crashing.org,
gregkh@suse.de, takedakn@nttdata.co.jp,
linux-kernel@vger.kernel.org, spock@gentoo.org, mingo@redhat.com,
viro@zeniv.linux.org.uk, mfasheh@suse.com,
akpm@linux-foundation.org, t.sailer@alumni.ethz.ch,
shemminger@linux-foundation.org, menage@google.com,
abelay@mit.edu, drbd-dev@lists.linbit.com
Subject: Re: [Drbd-dev] [PATCH 2/2] exec: allow core_pipe recursion check to look for a value of 1 rather than 0 (v2)
Date: Mon, 1 Feb 2010 15:18:56 +0100 [thread overview]
Message-ID: <20100201141856.GA9453@redhat.com> (raw)
In-Reply-To: <20100201131627.GE25094@hmsreliant.think-freely.org>
On 02/01, Neil Horman wrote:
>
> On Mon, Feb 01, 2010 at 11:29:36AM +0100, Oleg Nesterov wrote:
> >
> > > > Completely off-topic, but I think __call_usermodehelper(UMH_NO_WAIT) is
> > > > buggy. if kernel_thread() failes it should do call_usermodehelper_freeinfo().
> > > > Also, UMH_WAIT_EXEC should set ->retval in this case.
> > > >
> > > I went down that path last time I changed this code, Andrew and I decided that
> > > yes it was buggy, but someone (can't recall how) smacked me around a bit and
> > > explained how it worked (some odd artifact behavior of the scheduler). Its in
> > > the lkml archives if you want to get the whole story.
> >
> > Hmm. I strongly believe this is buggy, and the scheduler can't help in any
> > way. Fortunately, kernel_thread() must "never" fail...
>
> Commit 95e0d86badc410d525ea7218fd32df7bfbf9c837 has the discussion from the
> previous time that I messed with this code. Not sure how closely it relates,
> but...
The changelog correctly explains why it is OK to do complete() from
__call_usermodehelper() in UMH_WAIT_EXEC case: CLONE_VFORK guarantees
kernel_thread(CLONE_VFORK) won't return (see do_fork()) until
____call_usermodehelper() thread does exec or exits.
I meant a much more simple problem, I think we need something like this
patch:
--- kernel/kmod.c
+++ kernel/kmod.c
@@ -266,15 +266,18 @@ static void __call_usermodehelper(struct
switch (wait) {
case UMH_NO_WAIT:
+ if (pid < 0)
+ call_usermodehelper_freeinfo(sub_info);
break;
case UMH_WAIT_PROC:
if (pid > 0)
break;
- sub_info->retval = pid;
/* FALLTHROUGH */
case UMH_WAIT_EXEC:
+ if (pid < 0)
+ sub_info->retval = pid;
complete(sub_info->complete);
}
}
to fix 2 problems if kernel_thread() fails in __call_usermodehelper()
- UMH_NO_WAIT should do call_usermodehelper_freeinfo()
- UMH_WAIT_EXEC should set sub_info->retval to indicate
the error
> > Oh. And in theory, it is better to change wait_for_helper(). It should
> > do allow_signal(SIGCHLD) after kernel_thread().
I was wrong, of course we can't do this, the child can exit and reap
itself before we do sys_wait4().
> Otherwise, kernel_thread()
> > can fail if user-space sends SIGCHLD to the forking thread.
but this is still true. Fortunately this is very minor problem.
Oleg.
WARNING: multiple messages have this Message-ID (diff)
From: Oleg Nesterov <oleg@redhat.com>
To: Neil Horman <nhorman@tuxdriver.com>
Cc: linux-kernel@vger.kernel.org, akpm@linux-foundation.org,
jmoskovc@redhat.com, mingo@redhat.com, drbd-dev@lists.linbit.com,
benh@kernel.crashing.org, t.sailer@alumni.ethz.ch,
abelay@mit.edu, gregkh@suse.de, spock@gentoo.org,
viro@zeniv.linux.org.uk, neilb@suse.de, mfasheh@suse.com,
menage@google.com, shemminger@linux-foundation.org,
takedakn@nttdata.co.jp
Subject: Re: [PATCH 2/2] exec: allow core_pipe recursion check to look for a value of 1 rather than 0 (v2)
Date: Mon, 1 Feb 2010 15:18:56 +0100 [thread overview]
Message-ID: <20100201141856.GA9453@redhat.com> (raw)
In-Reply-To: <20100201131627.GE25094@hmsreliant.think-freely.org>
On 02/01, Neil Horman wrote:
>
> On Mon, Feb 01, 2010 at 11:29:36AM +0100, Oleg Nesterov wrote:
> >
> > > > Completely off-topic, but I think __call_usermodehelper(UMH_NO_WAIT) is
> > > > buggy. if kernel_thread() failes it should do call_usermodehelper_freeinfo().
> > > > Also, UMH_WAIT_EXEC should set ->retval in this case.
> > > >
> > > I went down that path last time I changed this code, Andrew and I decided that
> > > yes it was buggy, but someone (can't recall how) smacked me around a bit and
> > > explained how it worked (some odd artifact behavior of the scheduler). Its in
> > > the lkml archives if you want to get the whole story.
> >
> > Hmm. I strongly believe this is buggy, and the scheduler can't help in any
> > way. Fortunately, kernel_thread() must "never" fail...
>
> Commit 95e0d86badc410d525ea7218fd32df7bfbf9c837 has the discussion from the
> previous time that I messed with this code. Not sure how closely it relates,
> but...
The changelog correctly explains why it is OK to do complete() from
__call_usermodehelper() in UMH_WAIT_EXEC case: CLONE_VFORK guarantees
kernel_thread(CLONE_VFORK) won't return (see do_fork()) until
____call_usermodehelper() thread does exec or exits.
I meant a much more simple problem, I think we need something like this
patch:
--- kernel/kmod.c
+++ kernel/kmod.c
@@ -266,15 +266,18 @@ static void __call_usermodehelper(struct
switch (wait) {
case UMH_NO_WAIT:
+ if (pid < 0)
+ call_usermodehelper_freeinfo(sub_info);
break;
case UMH_WAIT_PROC:
if (pid > 0)
break;
- sub_info->retval = pid;
/* FALLTHROUGH */
case UMH_WAIT_EXEC:
+ if (pid < 0)
+ sub_info->retval = pid;
complete(sub_info->complete);
}
}
to fix 2 problems if kernel_thread() fails in __call_usermodehelper()
- UMH_NO_WAIT should do call_usermodehelper_freeinfo()
- UMH_WAIT_EXEC should set sub_info->retval to indicate
the error
> > Oh. And in theory, it is better to change wait_for_helper(). It should
> > do allow_signal(SIGCHLD) after kernel_thread().
I was wrong, of course we can't do this, the child can exit and reap
itself before we do sys_wait4().
> Otherwise, kernel_thread()
> > can fail if user-space sends SIGCHLD to the forking thread.
but this is still true. Fortunately this is very minor problem.
Oleg.
next prev parent reply other threads:[~2010-02-01 14:20 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-01-21 20:08 [Drbd-dev] [PATCH] exec: allow core_pipe recursion check to look for a value of 1 rather than 0 Neil Horman
2010-01-21 20:08 ` Neil Horman
2010-01-21 21:29 ` Thomas Sailer
2010-01-25 21:13 ` Neil Horman
2010-01-26 23:53 ` [Drbd-dev] " Andrew Morton
2010-01-26 23:53 ` Andrew Morton
2010-01-29 15:10 ` [Drbd-dev] [PATCH 0/2] exec: allow core_pipe recursion check to look for a value of 1 rather than 0 (v2) Neil Horman
2010-01-29 15:10 ` Neil Horman
2010-01-29 15:13 ` [Drbd-dev] [PATCH 1/2] " Neil Horman
2010-01-29 15:13 ` Neil Horman
2010-01-31 14:46 ` [Drbd-dev] " Oleg Nesterov
2010-01-31 14:46 ` Oleg Nesterov
2010-01-31 15:41 ` [Drbd-dev] " Neil Horman
2010-01-31 15:41 ` Neil Horman
2010-01-29 15:14 ` [Drbd-dev] [PATCH 2/2] " Neil Horman
2010-01-29 15:14 ` Neil Horman
2010-01-31 15:50 ` [Drbd-dev] " Oleg Nesterov
2010-01-31 15:50 ` Oleg Nesterov
2010-01-31 17:41 ` [Drbd-dev] " Neil Horman
2010-01-31 17:41 ` Neil Horman
2010-02-01 10:29 ` [Drbd-dev] " Oleg Nesterov
2010-02-01 10:29 ` Oleg Nesterov
2010-02-01 10:39 ` [Drbd-dev] " Oleg Nesterov
2010-02-01 10:39 ` Oleg Nesterov
2010-02-01 13:16 ` [Drbd-dev] " Neil Horman
2010-02-01 13:16 ` Neil Horman
2010-02-01 14:18 ` Oleg Nesterov [this message]
2010-02-01 14:18 ` Oleg Nesterov
2010-02-02 19:19 ` [Drbd-dev] [PATCH 0/2] exec: refactor how call_usermodehelper works, and update the sense of the core_pipe recursion check (v3) Neil Horman
2010-02-02 19:19 ` Neil Horman
2010-02-02 19:20 ` [Drbd-dev] [PATCH 1/2] " Neil Horman
2010-02-02 19:20 ` Neil Horman
2010-02-03 20:09 ` [Drbd-dev] " Oleg Nesterov
2010-02-03 20:09 ` Oleg Nesterov
2010-02-02 19:21 ` [Drbd-dev] [PATCH 2/2] " Neil Horman
2010-02-02 19:21 ` Neil Horman
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=20100201141856.GA9453@redhat.com \
--to=oleg@redhat.com \
--cc=abelay@mit.edu \
--cc=akpm@linux-foundation.org \
--cc=benh@kernel.crashing.org \
--cc=drbd-dev@lists.linbit.com \
--cc=gregkh@suse.de \
--cc=jmoskovc@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=menage@google.com \
--cc=mfasheh@suse.com \
--cc=mingo@redhat.com \
--cc=neilb@suse.de \
--cc=nhorman@tuxdriver.com \
--cc=shemminger@linux-foundation.org \
--cc=spock@gentoo.org \
--cc=t.sailer@alumni.ethz.ch \
--cc=takedakn@nttdata.co.jp \
--cc=viro@zeniv.linux.org.uk \
/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.