On Fri, 30 Sep 2005, Oleg Nesterov wrote:
>
> Roland, could you please explain this code in wait_task_stopped()
>
> if (!exit_code || p->state > TASK_STOPPED)
> goto bail_ref;
Regardless of any other explanations, it turns out that "p->state" can be
something like "TASK_RUNNING | TASK_NONINTERACTIVE", and then this would
trigger totally incorrectly.
> It looks like "WSTOPPED | WNOWAIT is illegal for TASK_TRACED child"
> to me. Is this correct? I think no.
No, I think it's correct. If you have a traced child, you can't just wait
for it. You need to use ptrace to release it first.
> Actually, I don't understand why we are checking p->state at all, we
> already dropped tasklist_lock, the state can change at any monent.
If it's TASK_TRACED, and it's our child, then it shouldn't be changing.
Besides, even if it does, we had a perfectly fine race, and we'll have
been woken up again and we'll just go through the do_wait() loop once
more.
So I think the code is mostly correct. But that ">" is definitely
incorrect.
Maybe it should just be
if (!exit_code || (p->state & TASK_TRACED))
instead?
Roland?
Linus
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
[Index of Archives]
[Kernel Newbies]
[Netfilter]
[Bugtraq]
[Photo]
[Gimp]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Video 4 Linux]
[Linux for the blind]
|
|