]> git.proxmox.com Git - mirror_qemu.git/commitdiff
fsdev: Fix overrun after readlink() fills buffer completely
authorMarkus Armbruster <armbru@redhat.com>
Fri, 21 Feb 2014 16:43:09 +0000 (17:43 +0100)
committerAneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Wed, 26 Feb 2014 06:54:07 +0000 (12:24 +0530)
readlink() returns the number of bytes written to the buffer, and it
doesn't write a terminating null byte.  do_readlink() writes it
itself.  Overruns the buffer when readlink() filled it completely.

Fix by reserving space for the null byte when calling readlink(), like
we do elsewhere.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
fsdev/virtfs-proxy-helper.c

index 713a7b2b87a43bb41c1597a10d8427293c816e9d..bfecb8706c856afa03ff85d35c0f31a9bd7f1bbd 100644 (file)
@@ -595,7 +595,7 @@ static int do_readlink(struct iovec *iovec, struct iovec *out_iovec)
     }
     buffer = g_malloc(size);
     v9fs_string_init(&target);
-    retval = readlink(path.data, buffer, size);
+    retval = readlink(path.data, buffer, size - 1);
     if (retval > 0) {
         buffer[retval] = '\0';
         v9fs_string_sprintf(&target, "%s", buffer);