]> xenbits.xensource.com Git - libvirt.git/commitdiff
virpcivpdtest: Fix potential double-free()
authorMichal Privoznik <mprivozn@redhat.com>
Fri, 28 Jan 2022 19:37:42 +0000 (20:37 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Tue, 1 Feb 2022 16:37:06 +0000 (17:37 +0100)
Inside the testPCIVPDResourceCustomCompareIndex() function we
have two variables @a and @b, both marked as g_autoptr(). Then,
towards the end of the function b->value is freed and set to
a->value. This is to make sure
virPCIVPDResourceCustomCompareIndex() works correctly even if
->value member is the same for both arguments.

Nevertheless, if the function returns anything else than 0 then
the control executes subsequent return statement and since
b->value points to the very same string as a->value a double free
will occur. Avoid this by setting b->value to NULL explicitly,
just like we are already doing for the successful path.

Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Erik Skultety <eskultet@redhat.com>
tests/virpcivpdtest.c

index a6bf46b103a559dd6f4ebf02f2080fb226f8aac6..a5f4abae6fedac9df16a5e4426f6ef763fbb9fc5 100644 (file)
@@ -229,8 +229,10 @@ testPCIVPDResourceCustomCompareIndex(const void *data G_GNUC_UNUSED)
     /* Different index, same value pointers */
     g_free(b->value);
     b->value = a->value;
-    if (virPCIVPDResourceCustomCompareIndex(b, a))
+    if (virPCIVPDResourceCustomCompareIndex(b, a)) {
+        b->value = NULL;
         return -1;
+    }
 
     b->value = NULL;