lkml.org 
[lkml]   [2008]   [May]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [RFC PATCH] set TASK_TRACED before arch_ptrace code to fix a race
From
Date
On Thu, 2008-05-22 at 10:47 +0800, Luming Yu wrote:
> Hello list,
>
> The following patch is to fixed a race in ptrace_stop handling which
> causes "strace" hang if the target process blocks SIGTRAP with the
> test case filed at
> https://bugzilla.redhat.com/show_bug.cgi?id=446200#c16.
> Please note this is just IA64 problem because just IA64 has
> arch_ptrace_stop_needed defined, and has arch_ptrace_stop defined that
> would set notify_resume flags for syncing rbs...but it also opens the
> door to invoke ia64_do_signal->get_signal_to_deliver before setting
> current PTRACED flag. Please help review.
>
> **The patch is enclosed in text attachment*
> **I'm using web client to send the patch* *

I'm inlining the patch for sake of convenience:

>
> Signed-off-by: Yu Luming <luming.yu@intel.com>
> --------------------------------------
> signal.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> --- 0/kernel/signal.c 2008-05-14 02:24:51.000000000 +0800
> +++ 1/kernel/signal.c 2008-05-22 13:54:42.000000000 +0800
> @@ -1488,6 +1488,9 @@
> {
> int killed = 0;
>
> + /* Let the debugger run. */
> + __set_current_state(TASK_TRACED);
> +

That's probably not what we want. What happens if the task then sleeps
during the user-space access? Unless I forgot something obvious, it will
never get scheduled again...

Petr Tesarik

> if (arch_ptrace_stop_needed(exit_code, info)) {
> /*
> * The arch code has something special to do before a
> @@ -1516,8 +1519,6 @@
> current->last_siginfo = info;
> current->exit_code = exit_code;
>
> - /* Let the debugger run. */
> - __set_current_state(TASK_TRACED);
> spin_unlock_irq(&current->sighand->siglock);
> read_lock(&tasklist_lock);
> if (!unlikely(killed) && may_ptrace_stop()) {



\
 
 \ /
  Last update: 2008-05-22 10:49    [W:0.108 / U:0.060 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site