summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRoland McGrath <roland@redhat.com>2009-11-30 15:27:21 -0500
committerFrank Ch. Eigler <fche@elastic.org>2009-11-30 15:33:38 -0500
commitd3b20053a696d3834d4b2cf73afa296464555c85 (patch)
tree27158e141c8bf9df16768ec4827b37d4a428adb4
parentab7236f68712b18656cb82307e6ca5dbe8de9fa7 (diff)
downloadsystemtap-steved-d3b20053a696d3834d4b2cf73afa296464555c85.tar.gz
systemtap-steved-d3b20053a696d3834d4b2cf73afa296464555c85.tar.xz
systemtap-steved-d3b20053a696d3834d4b2cf73afa296464555c85.zip
PR10653: don't corrupt signal structs in itrace on rawhide utrace
* runtime/itrace.c (usr_itrace_report_signal): On modern utrace, must check/propagate utrace_signal_action().
-rw-r--r--runtime/itrace.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/runtime/itrace.c b/runtime/itrace.c
index 03e1e403..f2ed86f2 100644
--- a/runtime/itrace.c
+++ b/runtime/itrace.c
@@ -131,9 +131,16 @@ static u32 usr_itrace_report_signal(u32 action,
ui = rcu_dereference(engine->data);
WARN_ON(!ui);
-
- if (info->si_signo != SIGTRAP || !ui)
- return UTRACE_RESUME;
+
+#if defined(UTRACE_ORIG_VERSION)
+ if (info->si_signo != SIGTRAP || !ui)
+ return UTRACE_RESUME;
+#else
+ if (utrace_signal_action(action) == UTRACE_SIGNAL_HANDLER ||
+ utrace_signal_action(action) == UTRACE_SIGNAL_REPORT ||
+ info->si_signo != SIGTRAP || !ui)
+ return UTRACE_RESUME | utrace_signal_action(action);
+#endif
#if defined(UTRACE_ORIG_VERSION) && defined(CONFIG_PPC)
/* Because of a ppc utrace bug, we need to stop the task here.