All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] perf stat: avoid sending SIGTERM to random processes
@ 2013-06-04 15:44 Stephane Eranian
  2013-06-19  6:46 ` Stephane Eranian
  2013-07-12  8:50 ` [tip:perf/urgent] perf stat: Avoid " tip-bot for Stephane Eranian
  0 siblings, 2 replies; 3+ messages in thread
From: Stephane Eranian @ 2013-06-04 15:44 UTC (permalink / raw)
  To: linux-kernel; +Cc: peterz, mingo, acme, jolsa, namhyung


This patch fixes a problem with perf stat whereby on termination
it may send a SIGTERM signal to random processes on systems
with high PID recycling. I got some actual bug reports on this.

There is race between the SIGCHLD and sig_atexit() handlers.
This patch addresses this problem by clearing child_pid in the
SIGCHLD handler.

Signed-off-by: Stephane Eranian <eranian@google.com>
---

diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index 7e910ba..95768af 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -87,7 +87,7 @@ static int			run_count			=  1;
 static bool			no_inherit			= false;
 static bool			scale				=  true;
 static enum aggr_mode		aggr_mode			= AGGR_GLOBAL;
-static pid_t			child_pid			= -1;
+static volatile pid_t		child_pid			= -1;
 static bool			null_run			=  false;
 static int			detailed_run			=  0;
 static bool			big_num				=  true;
@@ -1148,13 +1148,34 @@ static void skip_signal(int signo)
 		done = 1;
 
 	signr = signo;
+	/*
+	 * render child_pid harmless
+	 * won't send SIGTERM to a random
+	 * process in case of race condition
+	 * and fast PID recycling
+	 */
+	child_pid = -1;
 }
 
 static void sig_atexit(void)
 {
+	sigset_t set, oset;
+
+	/*
+	 * avoid race condition with SIGCHLD handler
+	 * in skip_signal() which is modifying child_pid
+	 * goal is to avoid send SIGTERM to a random
+	 * process
+	 */
+	sigemptyset(&set);
+	sigaddset(&set, SIGCHLD);
+	sigprocmask(SIG_BLOCK, &set, &oset);
+
 	if (child_pid != -1)
 		kill(child_pid, SIGTERM);
 
+	sigprocmask(SIG_SETMASK, &oset, NULL);
+
 	if (signr == -1)
 		return;
 

^ permalink raw reply related	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-07-12  8:51 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-06-04 15:44 [PATCH] perf stat: avoid sending SIGTERM to random processes Stephane Eranian
2013-06-19  6:46 ` Stephane Eranian
2013-07-12  8:50 ` [tip:perf/urgent] perf stat: Avoid " tip-bot for Stephane Eranian

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.