]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
Fix invalid read in virCgroupGetValueStr
authorJán Tomko <jtomko@redhat.com>
Wed, 26 Jun 2013 11:07:24 +0000 (13:07 +0200)
committerJán Tomko <jtomko@redhat.com>
Wed, 26 Jun 2013 15:31:28 +0000 (17:31 +0200)
Don't check for '\n' at the end of file if zero bytes were read.

Found by valgrind:
==404== Invalid read of size 1
==404==    at 0x529B09F: virCgroupGetValueStr (vircgroup.c:540)
==404==    by 0x529AF64: virCgroupMoveTask (vircgroup.c:1079)
==404==    by 0x1EB475: qemuSetupCgroupForEmulator (qemu_cgroup.c:1061)
==404==    by 0x1D9489: qemuProcessStart (qemu_process.c:3801)
==404==    by 0x18557E: qemuDomainObjStart (qemu_driver.c:5787)
==404==    by 0x190FA4: qemuDomainCreateWithFlags (qemu_driver.c:5839)

Introduced by 0d0b409.

https://bugzilla.redhat.com/show_bug.cgi?id=978356
(cherry picked from commit 306c49ffd56a1c72b1892d50f2a75531c62f4a1d)

src/util/vircgroup.c

index 92b185e8ddd08cfedb36e3984b35089d11fc0c02..006391d8947b9f7e4d1ab80b3f5a7a9edd0fa3e6 100644 (file)
@@ -544,7 +544,7 @@ static int virCgroupGetValueStr(virCgroupPtr group,
         VIR_DEBUG("Failed to read %s: %m\n", keypath);
     } else {
         /* Terminated with '\n' has sometimes harmful effects to the caller */
-        if ((*value)[rc - 1] == '\n')
+        if (rc > 0 && (*value)[rc - 1] == '\n')
             (*value)[rc - 1] = '\0';
 
         rc = 0;