Patch "perf buildid: Do not assume that readlink() returns a null terminated string" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
perf buildid: Do not assume that readlink() returns a null terminated string
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
perf-buildid-do-not-assume-that-readlink-returns-a-null-terminated-string.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Sun Mar 18 16:55:33 CET 2018
From: Tommi Rantala <[email protected]>
Date: Wed, 22 Mar 2017 15:06:20 +0200
Subject: perf buildid: Do not assume that readlink() returns a null terminated string
From: Tommi Rantala <[email protected]>
[ Upstream commit 5a2342111c68e623e27ee7ea3d0492d8dad6bda0 ]
Valgrind was complaining:
$ valgrind ./perf list >/dev/null ==11643== Memcheck, a memory error detector ==11643== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al. ==11643== Using Valgrind-3.12.0 and LibVEX; rerun with -h for copyright info ==11643== Command: ./perf list ==11643== ==11643== Conditional jump or move depends on uninitialised value(s) ==11643== at 0x4C30620: rindex (vg_replace_strmem.c:199) ==11643== by 0x49DAA9: build_id_cache__origname (build-id.c:198) ==11643== by 0x49E1C7: build_id_cache__valid_id (build-id.c:222) ==11643== by 0x49E1C7: build_id_cache__list_all (build-id.c:507) ==11643== by 0x4B9C8F: print_sdt_events (parse-events.c:2067) ==11643== by 0x4BB0B3: print_events (parse-events.c:2313) ==11643== by 0x439501: cmd_list (builtin-list.c:53) ==11643== by 0x497150: run_builtin (perf.c:359) ==11643== by 0x428CE0: handle_internal_command (perf.c:421) ==11643== by 0x428CE0: run_argv (perf.c:467) ==11643== by 0x428CE0: main (perf.c:614) [...]
Additionally, a zero length result from readlink() is not very interesting.
--- tools/perf/util/build-id.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-)
tools/perf/util/build-id.c +5 -1
@@ -182,13 +182,17 @@ char *build_id_cache__origname(const chachar buf[PATH_MAX ];char *ret =NULL , *p;size_t offs =5 ;/* == strlen("../..") */ +ssize_t len; linkname =build_id_cache__linkname (sbuild_id,NULL ,0 );if (!linkname)return NULL ; -if (readlink (linkname, buf,PATH_MAX ) <0 ) + len =readlink (linkname, buf,sizeof (buf) -1 ); +if (len <=0 ) goto out; + buf[len] ='\0' ; +/* The link should be "../..<origpath>/<sbuild_id>" */ p =strrchr (buf,'/' );/* Cut off the "/<sbuild_id>" */ if (p && (p > buf + offs)) {
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/perf-buildid-do-not-assume-that-readlink-returns-a-null-terminated-string.patch