lkml.org 
[lkml]   [2018]   [Mar]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 068/241] perf annotate: Fix a bug following symbolic link of a build-id file
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Taeung Song <treeze.taeung@gmail.com>


    [ Upstream commit 6ebd2547dd24daf95a21b2bc59931de8502afcc3 ]

    It is wrong way to read link name from a build-id file. Because a
    build-id file is not anymore a symbolic link but build-id directory of
    it is symbolic link, so fix it.

    For example, if build-id file name gotten from
    dso__build_id_filename() is as below,

    /root/.debug/.build-id/4f/75c7d197c951659d1c1b8b5fd49bcdf8f3f8b1/elf

    To correctly read link name of build-id, use the build-id dir path that
    is a symbolic link, instead of the above build-id file name like below.

    /root/.debug/.build-id/4f/75c7d197c951659d1c1b8b5fd49bcdf8f3f8b1

    Signed-off-by: Taeung Song <treeze.taeung@gmail.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Wang Nan <wangnan0@huawei.com>
    Link: http://lkml.kernel.org/r/1490598638-13947-2-git-send-email-treeze.taeung@gmail.com
    Fixes: 01412261d994 ("perf buildid-cache: Use path/to/bin/buildid/elf instead of path/to/bin/buildid")
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    tools/perf/util/annotate.c | 10 +++++++++-
    1 file changed, 9 insertions(+), 1 deletion(-)

    --- a/tools/perf/util/annotate.c
    +++ b/tools/perf/util/annotate.c
    @@ -1250,6 +1250,7 @@ static int dso__disassemble_filename(str
    {
    char linkname[PATH_MAX];
    char *build_id_filename;
    + char *build_id_path = NULL;

    if (dso->symtab_type == DSO_BINARY_TYPE__KALLSYMS &&
    !dso__is_kcore(dso))
    @@ -1265,8 +1266,14 @@ static int dso__disassemble_filename(str
    goto fallback;
    }

    + build_id_path = strdup(filename);
    + if (!build_id_path)
    + return -1;
    +
    + dirname(build_id_path);
    +
    if (dso__is_kcore(dso) ||
    - readlink(filename, linkname, sizeof(linkname)) < 0 ||
    + readlink(build_id_path, linkname, sizeof(linkname)) < 0 ||
    strstr(linkname, DSO__NAME_KALLSYMS) ||
    access(filename, R_OK)) {
    fallback:
    @@ -1278,6 +1285,7 @@ fallback:
    __symbol__join_symfs(filename, filename_size, dso->long_name);
    }

    + free(build_id_path);
    return 0;
    }


    \
     
     \ /
      Last update: 2018-03-19 20:36    [W:4.368 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site