summaryrefslogtreecommitdiffstats
path: root/misc-utils/namei.c
diff options
context:
space:
mode:
authorKarel Zak2009-01-06 14:26:12 +0100
committerKarel Zak2009-01-06 14:26:12 +0100
commitf7ed29a7b6fe4cd7a6d53619674115355771aed5 (patch)
treea1f35dfa71a96414fd8d246f2f2e6771f6c3ef59 /misc-utils/namei.c
parentraw: default to /dev/raw/rawctl (diff)
downloadkernel-qcow2-util-linux-f7ed29a7b6fe4cd7a6d53619674115355771aed5.tar.gz
kernel-qcow2-util-linux-f7ed29a7b6fe4cd7a6d53619674115355771aed5.tar.xz
kernel-qcow2-util-linux-f7ed29a7b6fe4cd7a6d53619674115355771aed5.zip
namei: fix buffer overflow
$ ./namei /usr/bin/java *** glibc detected *** ./namei: free(): invalid next size (fast): 0x00000000018e5070 *** [...] Aborted Reported-by: Sami Kerola <kerolasa@iki.fi> Signed-off-by: Karel Zak <kzak@redhat.com>
Diffstat (limited to 'misc-utils/namei.c')
-rw-r--r--misc-utils/namei.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/misc-utils/namei.c b/misc-utils/namei.c
index 37909fe4f..c259b30f7 100644
--- a/misc-utils/namei.c
+++ b/misc-utils/namei.c
@@ -197,10 +197,11 @@ readlink_to_namei(struct namei *nm, const char *path)
err(EXIT_FAILURE, _("out of memory?"));
if (*sym != '/') {
+ /* create the absolute path from the relative symlink */
memcpy(nm->abslink, path, nm->relstart);
*(nm->abslink + nm->relstart) = '/';
nm->relstart++;
- memcpy(nm->abslink + nm->relstart, sym, sz);
+ memcpy(nm->abslink + nm->relstart, sym, sz - nm->relstart);
} else
memcpy(nm->abslink, sym, sz);
nm->abslink[sz] = '\0';