aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@gmail.com>2011-10-29 12:51:53 -0400
committerUlrich Drepper <drepper@gmail.com>2011-10-29 12:51:53 -0400
commitc9aafacee48275d85d86f25ab4569516f180846a (patch)
tree4536b3eef5c45350700078df361166215b2b0b9e
parentd272e7f19dc2dae6d215f6ca6512d042575ed736 (diff)
downloadglibc-c9aafacee48275d85d86f25ab4569516f180846a.tar
glibc-c9aafacee48275d85d86f25ab4569516f180846a.tar.gz
glibc-c9aafacee48275d85d86f25ab4569516f180846a.tar.bz2
glibc-c9aafacee48275d85d86f25ab4569516f180846a.zip
Correctly NUL-terminate link name in sprof
-rw-r--r--ChangeLog4
-rw-r--r--NEWS2
-rw-r--r--elf/sprof.c7
3 files changed, 9 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index d5d7cb5c74..6cb54e65d4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
2011-10-29 Ulrich Drepper <drepper@gmail.com>
+ [BZ #13337]
+ * elf/sprof.c (load_shobj): Correctly NUL-terminate link name.
+ Patch by Thomas Jarosch <thomas.jarosch@intra2net.com>.
+
* elf/chroot_canon.c (chroot_canon): Cleanups.
* elf/dl-lookup.c (_dl_setup_hash): Avoid warning.
diff --git a/NEWS b/NEWS
index c9952a896e..e4b9f449d3 100644
--- a/NEWS
+++ b/NEWS
@@ -12,7 +12,7 @@ Version 2.15
6779, 6783, 9696, 11589, 12403, 12847, 12868, 12852, 12874, 12885, 12892,
12907, 12922, 12935, 13007, 13021, 13067, 13068, 13090, 13092, 13114,
13118, 13123, 13134, 13138, 13150, 13179, 13192, 13268, 13291, 13335,
- 13344
+ 13337, 13344
* New program pldd to list loaded object of a process
Implemented by Ulrich Drepper.
diff --git a/elf/sprof.c b/elf/sprof.c
index dbe217b083..069649a654 100644
--- a/elf/sprof.c
+++ b/elf/sprof.c
@@ -596,10 +596,11 @@ load_shobj (const char *name)
static const char procpath[] = "/proc/self/fd/%d";
char origprocname[sizeof (procpath) + sizeof (int) * 3];
snprintf (origprocname, sizeof (origprocname), procpath, fd);
- char *origlink = (char *) alloca (PATH_MAX + 1);
- origlink[PATH_MAX] = '\0';
- if (readlink (origprocname, origlink, PATH_MAX) == -1)
+ char *origlink = (char *) alloca (PATH_MAX);
+ ssize_t n = readlink (origprocname, origlink, PATH_MAX)
+ if (n == -1)
goto no_debuginfo;
+ origlink[n] = '\0';
/* Try to find the actual file. There are three places:
1. the same directory the DSO is in