lkml.org 
[lkml]   [2008]   [Mar]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Subject[PATCH] Discard notification signals when a tracer exits
From
Date
When a tracer exits without detaching from the traced process, the
tracee may be at a tracer notification stop and will thus interpret
the value in task->exit_code (SIGTRAP | 0x80) as the signal to be
delivered.

This patch fixes the problem by clearing exit_code when detaching
the traced process from a dying tracer.

Signed-off-by: Petr Tesarik <ptesarik@suse.cz>

---
exit.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)

--- a/kernel/exit.c
+++ b/kernel/exit.c
@@ -642,8 +642,10 @@ reparent_thread(struct task_struct *p, s
/*
* If it was at a trace stop, turn it into
* a normal stop since it's no longer being
- * traced.
+ * traced. Cancel the notification signal,
+ * or the tracee may get a SIGTRAP.
*/
+ p->exit_code = 0;
ptrace_untrace(p);
}
}
@@ -713,6 +715,10 @@ static void forget_original_parent(struc
p->real_parent = reaper;
reparent_thread(p, father, 0);
} else {
+ /* cancel the notification signal at a trace stop */
+ if (p->state == TASK_TRACED)
+ p->exit_code = 0;
+
/* reparent ptraced task to its real parent */
__ptrace_unlink (p);
if (p->exit_state == EXIT_ZOMBIE && p->exit_signal != -1 &&


\
 
 \ /
  Last update: 2008-03-25 15:35    [W:0.081 / U:1.596 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site