linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Ingo Molnar <mingo@kernel.org>
Cc: Clark Williams <williams@redhat.com>,
	linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org,
	Janne Huttunen <janne.huttunen@nokia.com>,
	Alexander Shishkin <alexander.shishkin@linux.intel.com>,
	Andi Kleen <ak@linux.intel.com>,
	Jaroslav Skarvada <jskarvad@redhat.com>,
	Namhyung Kim <namhyung@kernel.org>,
	Peter Zijlstra <peterz@infradead.org>,
	Arnaldo Carvalho de Melo <acme@redhat.com>
Subject: [PATCH 13/14] perf script python: Fix dict reference counting
Date: Wed, 11 Jul 2018 16:43:04 -0400	[thread overview]
Message-ID: <20180711204305.12924-14-acme@kernel.org> (raw)
In-Reply-To: <20180711204305.12924-1-acme@kernel.org>

From: Janne Huttunen <janne.huttunen@nokia.com>

The dictionaries are attached to the parameter tuple that steals the
references and takes care of releasing them when appropriate.  The code
should not decrement the reference counts explicitly.  E.g. if libpython
has been built with reference debugging enabled, the superfluous DECREFs
will trigger this error when running perf script:

  Fatal Python error: Objects/tupleobject.c:238 object at
  0x7f10f2041b40 has negative ref count -1
  Aborted (core dumped)

If the reference debugging is not enabled, the superfluous DECREFs might
cause the dict objects to be silently released while they are still in
use. This may trigger various other assertions or just cause perf
crashes and/or weird and unexpected data changes in the stored Python
objects.

Signed-off-by: Janne Huttunen <janne.huttunen@nokia.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Acked-by: Namhyung Kim <namhyung@kernel.org>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jaroslav Skarvada <jskarvad@redhat.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/1531133990-17485-1-git-send-email-janne.huttunen@nokia.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
 tools/perf/util/scripting-engines/trace-event-python.c | 8 ++------
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c
index 8b2eb6dbff4d..bc32e57d17be 100644
--- a/tools/perf/util/scripting-engines/trace-event-python.c
+++ b/tools/perf/util/scripting-engines/trace-event-python.c
@@ -908,14 +908,11 @@ static void python_process_tracepoint(struct perf_sample *sample,
 	if (_PyTuple_Resize(&t, n) == -1)
 		Py_FatalError("error resizing Python tuple");
 
-	if (!dict) {
+	if (!dict)
 		call_object(handler, t, handler_name);
-	} else {
+	else
 		call_object(handler, t, default_handler_name);
-		Py_DECREF(dict);
-	}
 
-	Py_XDECREF(all_entries_dict);
 	Py_DECREF(t);
 }
 
@@ -1235,7 +1232,6 @@ static void python_process_general_event(struct perf_sample *sample,
 
 	call_object(handler, t, handler_name);
 
-	Py_DECREF(dict);
 	Py_DECREF(t);
 }
 
-- 
2.14.4


  parent reply	other threads:[~2018-07-11 20:45 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-11 20:42 [GIT PULL 00/14] perf/urgent fixes Arnaldo Carvalho de Melo
2018-07-11 20:42 ` [PATCH 01/14] perf tools: Generate a Python script compatible with Python 2 and 3 Arnaldo Carvalho de Melo
2018-07-11 20:42 ` [PATCH 02/14] perf scripts python: Add Python 3 support to Core.py Arnaldo Carvalho de Melo
2018-07-11 20:42 ` [PATCH 03/14] perf scripts python: Add Python 3 support to SchedGui.py Arnaldo Carvalho de Melo
2018-07-11 20:42 ` [PATCH 04/14] perf scripts python: Add Python 3 support to Util.py Arnaldo Carvalho de Melo
2018-07-11 20:42 ` [PATCH 05/14] perf scripts python: Add Python 3 support to sched-migration.py Arnaldo Carvalho de Melo
2018-07-11 20:42 ` [PATCH 06/14] perf scripts python: Add Python 3 support to EventClass.py Arnaldo Carvalho de Melo
2018-07-11 20:42 ` [PATCH 07/14] perf test shell: Replace '|&' with '2>&1 |' to work with more shells Arnaldo Carvalho de Melo
2018-07-11 20:42 ` [PATCH 08/14] perf test shell: Make perf's inet_pton test more portable Arnaldo Carvalho de Melo
2018-07-11 20:43 ` [PATCH 09/14] perf llvm-utils: Remove bashism from kernel include fetch script Arnaldo Carvalho de Melo
2018-07-11 20:43 ` [PATCH 10/14] perf test shell: Prevent temporary editor files from being considered test scripts Arnaldo Carvalho de Melo
2018-07-11 20:43 ` [PATCH 11/14] perf tools: Fix compilation errors on gcc8 Arnaldo Carvalho de Melo
2018-07-11 20:43 ` [PATCH 12/14] perf stat: Fix --interval_clear option Arnaldo Carvalho de Melo
2018-07-11 20:43 ` Arnaldo Carvalho de Melo [this message]
2018-07-11 20:43 ` [PATCH 14/14] perf tools: Use python-config --includes rather than --cflags Arnaldo Carvalho de Melo
2018-07-12 13:54 ` [GIT PULL 00/14] perf/urgent fixes Ingo Molnar

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180711204305.12924-14-acme@kernel.org \
    --to=acme@kernel.org \
    --cc=acme@redhat.com \
    --cc=ak@linux.intel.com \
    --cc=alexander.shishkin@linux.intel.com \
    --cc=janne.huttunen@nokia.com \
    --cc=jskarvad@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-perf-users@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=namhyung@kernel.org \
    --cc=peterz@infradead.org \
    --cc=williams@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).