lkml.org 
[lkml]   [2020]   [Aug]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.7 090/204] perf probe: Fix memory leakage when the probe point is not found
    Date
    From: Masami Hiramatsu <mhiramat@kernel.org>

    commit 12d572e785b15bc764e956caaa8a4c846fd15694 upstream.

    Fix the memory leakage in debuginfo__find_trace_events() when the probe
    point is not found in the debuginfo. If there is no probe point found in
    the debuginfo, debuginfo__find_probes() will NOT return -ENOENT, but 0.

    Thus the caller of debuginfo__find_probes() must check the tf.ntevs and
    release the allocated memory for the array of struct probe_trace_event.

    The current code releases the memory only if the debuginfo__find_probes()
    hits an error but not checks tf.ntevs. In the result, the memory allocated
    on *tevs are not released if tf.ntevs == 0.

    This fixes the memory leakage by checking tf.ntevs == 0 in addition to
    ret < 0.

    Fixes: ff741783506c ("perf probe: Introduce debuginfo to encapsulate dwarf information")
    Signed-off-by: Masami Hiramatsu <mhiramat@kernel.org>
    Reviewed-by: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: stable@vger.kernel.org
    Link: http://lore.kernel.org/lkml/159438668346.62703.10887420400718492503.stgit@devnote2
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    tools/perf/util/probe-finder.c | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    --- a/tools/perf/util/probe-finder.c
    +++ b/tools/perf/util/probe-finder.c
    @@ -1467,7 +1467,7 @@ int debuginfo__find_trace_events(struct
    if (ret >= 0 && tf.pf.skip_empty_arg)
    ret = fill_empty_trace_arg(pev, tf.tevs, tf.ntevs);

    - if (ret < 0) {
    + if (ret < 0 || tf.ntevs == 0) {
    for (i = 0; i < tf.ntevs; i++)
    clear_probe_trace_event(&tf.tevs[i]);
    zfree(tevs);

    \
     
     \ /
      Last update: 2020-08-20 15:06    [W:4.049 / U:0.432 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site