Skip to content

Commit 594e1cf

Browse files
deepakraoggregkh
authored andcommitted
tracing: Fix resource leak on mmiotrace trace_pipe close
commit c1d87e7 upstream. The mmiotrace tracer was added May 12th 2008. At that time, resources created in pipe_open() could not be freed because there was not pipe_close function pointer of the tracer. The pipe_close function pointer was added in December 7th, 2009, but the mmiotrace tracer was not updated. mmio_pipe_open() allocates a header_iter and takes a pci_dev reference when trace_pipe is opened. mmio_close() frees them, but it was only wired to the tracer's .close callback. tracing_release_pipe() invokes .pipe_close, not .close, when the trace_pipe file is released. As a result, closing trace_pipe with the mmiotrace tracer active leaked the header_iter allocation and left a stale pci_dev reference. Set .pipe_close to mmio_close, matching how function_graph wires both callbacks to the same handler. Note, if the trace_pipe is read to completion, it will clean up the resources, but if one were to run: # head -n 1 /sys/kernel/tracing/trace_pipe VERSION 20070824 Over and over again, it would trigger a massive leak. Cc: stable@vger.kernel.org Fixes: c521efd ("tracing: Add pipe_close interface) Link: https://patch.msgid.link/20260715143604.14481-1-gaikwad.dcg@gmail.com Signed-off-by: deepakraog <gaikwad.dcg@gmail.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 201a011 commit 594e1cf

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

kernel/trace/trace_mmiotrace.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,6 @@ static void mmio_pipe_open(struct trace_iterator *iter)
109109
iter->private = hiter;
110110
}
111111

112-
/* XXX: This is not called when the pipe is closed! */
113112
static void mmio_close(struct trace_iterator *iter)
114113
{
115114
struct header_iter *hiter = iter->private;
@@ -279,6 +278,7 @@ static struct tracer mmio_tracer __read_mostly =
279278
.start = mmio_trace_start,
280279
.pipe_open = mmio_pipe_open,
281280
.close = mmio_close,
281+
.pipe_close = mmio_close,
282282
.read = mmio_read,
283283
.print_line = mmio_print_line,
284284
.noboot = true,

0 commit comments

Comments
 (0)