From: Andrea Arcangeli <andrea@suse.de>
To: David Mosberger <davidm@hpl.hp.com>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [patch] proposed fix for ptrace() SMP race
Date: Fri, 7 Sep 2001 15:28:58 +0200 [thread overview]
Message-ID: <20010907152858.O11329@athlon.random> (raw)
In-Reply-To: <200109062300.QAA27430@napali.hpl.hp.com> <20010907021900.L11329@athlon.random> <15256.6038.599811.557582@napali.hpl.hp.com> <20010907032801.N11329@athlon.random> <15256.22858.57091.769101@napali.hpl.hp.com>
In-Reply-To: <15256.22858.57091.769101@napali.hpl.hp.com>; from davidm@hpl.hp.com on Thu, Sep 06, 2001 at 10:21:14PM -0700
On Thu, Sep 06, 2001 at 10:21:14PM -0700, David Mosberger wrote:
> >>>>> On Fri, 7 Sep 2001 03:28:01 +0200, Andrea Arcangeli <andrea@suse.de> said:
>
> Andrea> For making sure the task isn't wakenup while it's under
> Andrea> ptrace we should just do that in
> Andrea> kernel/signal.c::ignored_signal() as far I can tell.
>
> This doesn't make sense: ignored_signal() is too late as
> handle_stop_signal() will already have woken up the task in response
> to a SIGCONT. Also, if you're suggesting to ignore SIGCONT while a
> PT_PTRACED is set, that certainly wouldn't be right. We only want to
correct, I suggest to ignore SIGCONT as well while PT_PTRACED is set.
> *delay* the wakeup while the ptrace() system call is running (which is
> much shorter than the period of time PT_PTRACED is set). So, as far
> as I can tell, you'd have to add more locking to the signal path,
Not more locking, just an additional check:
--- 2.4.10pre4aa1/kernel/signal.c.~1~ Sun Sep 2 20:04:01 2001
+++ 2.4.10pre4aa1/kernel/signal.c Fri Sep 7 15:22:23 2001
@@ -382,7 +382,7 @@
switch (sig) {
case SIGKILL: case SIGCONT:
/* Wake up the process if stopped. */
- if (t->state == TASK_STOPPED)
+ if (t->state == TASK_STOPPED && !(t->ptrace & PT_PTRACED))
wake_up_process(t);
t->exit_code = 0;
rm_sig_from_queue(SIGSTOP, t);
> So, I still think cpus_allowed is a safer and better approach at least
forget that. Also when you restore the cpus_allowed you won't
effectively wakup the task, it will just keep floating in the runqueue
but we won't try to reschedule the other idle cpus it so it's broken.
> Hmmh, looking at ptrace() more closely, the entire locking situation
> seems to be a bit confused. For example, what's stopping wait4() from
> releasing the task structure just after ptrace() released the
> tasklist_lock and before it checked child->state?
the get_task_struct()
Andrea
next prev parent reply other threads:[~2001-09-07 13:28 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-09-06 23:00 [patch] proposed fix for ptrace() SMP race David Mosberger
2001-09-07 0:19 ` Andrea Arcangeli
2001-09-07 0:40 ` David Mosberger
2001-09-07 1:28 ` Andrea Arcangeli
2001-09-07 1:41 ` Alan Cox
2001-09-07 13:34 ` Andrea Arcangeli
2001-09-07 5:21 ` David Mosberger
2001-09-07 13:28 ` Andrea Arcangeli [this message]
2001-09-07 15:35 ` David Mosberger
2001-09-08 17:11 ` Andrea Arcangeli
2001-09-10 17:20 ` David Mosberger
-- strict thread matches above, loose matches on Subject: below --
2001-09-10 17:54 Manfred Spraul
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=20010907152858.O11329@athlon.random \
--to=andrea@suse.de \
--cc=davidm@hpl.hp.com \
--cc=linux-kernel@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.