perf probe: Fix libdw memory leak
[ Upstream commit4585038b8e] Add missing dwarf_cfi_end to free memory associated with probe_finder cfi_eh which is allocated and owned via a call to dwarf_getcfi_elf. Confusingly cfi_dbg shouldn't be freed as its memory is owned by the passed in debuginfo struct. Add comments to highlight this. This addresses leak sanitizer issues seen in: tools/perf/tests/shell/test_uprobe_from_different_cu.sh Fixes:270bde1e76("perf probe: Search both .eh_frame and .debug_frame sections for probe location") Signed-off-by: Ian Rogers <irogers@google.com> Cc: David S. Miller <davem@davemloft.net> Cc: Steinar H. Gunderson <sesse@google.com> Cc: Alexander Lobakin <aleksander.lobakin@intel.com> Cc: Masami Hiramatsu (Google) <mhiramat@kernel.org> Cc: Kajol Jain <kjain@linux.ibm.com> Cc: Athira Rajeev <atrajeev@linux.vnet.ibm.com> Cc: Hemant Kumar <hemant@linux.vnet.ibm.com> Link: https://lore.kernel.org/r/20241016235622.52166-3-irogers@google.com Signed-off-by: Namhyung Kim <namhyung@kernel.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
f1b8bfe8d2
commit
2c6f6c3843
@@ -1499,6 +1499,10 @@ int debuginfo__find_trace_events(struct debuginfo *dbg,
|
||||
if (ret >= 0 && tf.pf.skip_empty_arg)
|
||||
ret = fill_empty_trace_arg(pev, tf.tevs, tf.ntevs);
|
||||
|
||||
#if _ELFUTILS_PREREQ(0, 142)
|
||||
dwarf_cfi_end(tf.pf.cfi_eh);
|
||||
#endif
|
||||
|
||||
if (ret < 0 || tf.ntevs == 0) {
|
||||
for (i = 0; i < tf.ntevs; i++)
|
||||
clear_probe_trace_event(&tf.tevs[i]);
|
||||
|
||||
@@ -81,9 +81,9 @@ struct probe_finder {
|
||||
|
||||
/* For variable searching */
|
||||
#if _ELFUTILS_PREREQ(0, 142)
|
||||
/* Call Frame Information from .eh_frame */
|
||||
/* Call Frame Information from .eh_frame. Owned by this struct. */
|
||||
Dwarf_CFI *cfi_eh;
|
||||
/* Call Frame Information from .debug_frame */
|
||||
/* Call Frame Information from .debug_frame. Not owned. */
|
||||
Dwarf_CFI *cfi_dbg;
|
||||
#endif
|
||||
Dwarf_Op *fb_ops; /* Frame base attribute */
|
||||
|
||||
Reference in New Issue
Block a user