]> granicus.if.org Git - strace/commitdiff
unwind: disable stack trace with multiple personalities
authorLuca Clementi <luca.clementi@gmail.com>
Tue, 10 Jun 2014 05:05:38 +0000 (22:05 -0700)
committerDmitry V. Levin <ldv@altlinux.org>
Wed, 11 Jun 2014 00:09:55 +0000 (00:09 +0000)
* unwind.c (unwind_cache_invalidate, unwind_print_stacktrace,
unwind_capture_stacktrace): Disable stack tracing of non-default
personality processes.

unwind.c

index ba7b5790cf4f2e5aaaab604f5c8f866dad884001..aff6c5a0758e716bfb810f8b54a153b741ec4fd6 100644 (file)
--- a/unwind.c
+++ b/unwind.c
@@ -269,6 +269,12 @@ rebuild_cache_if_invalid(struct tcb *tcp, const char *caller)
 void
 unwind_cache_invalidate(struct tcb* tcp)
 {
+#if SUPPORTED_PERSONALITIES > 1
+       if (tcp->currpers != DEFAULT_PERSONALITY) {
+               /* disable strack trace */
+               return;
+       }
+#endif
        mmap_cache_generation++;
        DPRINTF("tgen=%u, ggen=%u, tcp=%p, cache=%p", "increment",
                tcp->mmap_cache_generation,
@@ -566,6 +572,12 @@ queue_print(struct queue_t *queue)
 void
 unwind_print_stacktrace(struct tcb* tcp)
 {
+#if SUPPORTED_PERSONALITIES > 1
+       if (tcp->currpers != DEFAULT_PERSONALITY) {
+               /* disable strack trace */
+               return;
+       }
+#endif
        if (tcp->queue->head) {
               DPRINTF("tcp=%p, queue=%p", "queueprint", tcp, tcp->queue->head);
               queue_print(tcp->queue);
@@ -582,6 +594,12 @@ unwind_print_stacktrace(struct tcb* tcp)
 void
 unwind_capture_stacktrace(struct tcb *tcp)
 {
+#if SUPPORTED_PERSONALITIES > 1
+       if (tcp->currpers != DEFAULT_PERSONALITY) {
+               /* disable strack trace */
+               return;
+       }
+#endif
        if (tcp->queue->head)
                error_msg_and_die("bug: unprinted entries in queue");