From: Atsushi TSUJI <a-tsuji@bk.jp.nec.com>
To: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Oleg Nesterov <oleg@tv-sign.ru>,
linux-kernel@vger.kernel.org, Roland McGrath <roland@redhat.com>
Subject: Re: [PATCH] kill_something_info: don't take tasklist_lock for pid==-1 case
Date: Mon, 26 May 2008 16:03:58 +0900 [thread overview]
Message-ID: <483A60DE.7080306@bk.jp.nec.com> (raw)
In-Reply-To: <m18wy45nej.fsf@frodo.ebiederm.org>
Hi Eric,
Thank you for your comments.
Eric W. Biederman wrote:
> Sorry for the very delayed response. I have been moving and overwhelmed
> with everything.
>
> Oleg Nesterov <oleg@tv-sign.ru> writes:
>
>> On 03/25, Atsushi Tsuji wrote:
>>> This patch avoid taking tasklist_lock in kill_something_info() when
>>> the pid is -1. It can convert to rcu_read_lock() for this case because
>>> group_send_sig_info() doesn't need tasklist_lock.
>>>
>>> This patch is for 2.6.25-rc5-mm1.
>>>
>
>> Hmm. Yes, group_send_sig_info() doesn't need tasklist_lock. But we
>> take tasklist_lock to "freeze" the tasks list, so that we can't miss
>> a new forked process.
>>
>> Same for __kill_pgrp_info(), we take tasklist to kill the whole group
>> "atomically".
>>
>>
>> However. Is it really needed? copy_process() returns -ERESTARTNOINTR
>> if signal_pending(), and the new task is always placed at the tail
>> of the list. Looks like nobody can escape the signal, at least fatal
>> or SIGSTOP.
>
>
> Call me paranoid but I don't think there is any guarantee without a lock
> that we will hit the -ERESTARTNOITR check for new processes. I think we
> have a slight race where the fork process may not have received the signal
> (because it is near the tail of the list) but the new process would be
> added to the list immediately after we read it's pointer.
I know it might happen some races, but, as Oleg say, it is no problem
on the user side. Users cannot realize whether the process forked
during kill or after. We can pretend it was forked after kill
finished. So I think the change to convert tasklist_lock to
rcu_read_lock is reasonable way to avoid the local DOS for kill(-1,sig) case.
>> (Unfortunately, attach_pid() adds the task to the head of hlist, this
>> means we can't avoid tasklist for __kill_pgrp_info).
>
> Probably. If there wasn't a chance of sending a signal twice we
> could rescan the list if the head changed.
>
> What we might be able to do is to switch the tasklist_lock into a seq_lock.
> like was done for the dcache. The challenge is how to avoid resending
> a signal when we retry. Store the sequence number in the sighand_struct?
>
> If we had a magic place that children could check. To see if they belonged
> to a group of processes that was exiting that might help.
I think this idea is good for __kill_pgrp_info(), but it is a big change.
Thanks,
-Atsushi Tsuji
next prev parent reply other threads:[~2008-05-26 7:05 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-03-25 4:27 [PATCH] kill_something_info: don't take tasklist_lock for pid==-1 case Atsushi Tsuji
2008-03-25 13:56 ` Oleg Nesterov
2008-05-21 1:48 ` Atsushi Tsuji
2008-05-21 2:53 ` Eric W. Biederman
2008-05-21 3:47 ` Eric W. Biederman
2008-05-26 7:03 ` Atsushi TSUJI [this message]
2008-05-28 15:03 ` Eric W. Biederman
2008-05-31 16:55 ` Oleg Nesterov
2008-05-31 23:55 ` Eric W. Biederman
2008-06-01 16:29 ` Oleg Nesterov
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=483A60DE.7080306@bk.jp.nec.com \
--to=a-tsuji@bk.jp.nec.com \
--cc=ebiederm@xmission.com \
--cc=linux-kernel@vger.kernel.org \
--cc=oleg@tv-sign.ru \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox