]> xenbits.xensource.com Git - qemu-xen.git/commitdiff
oslib-posix: fix memory leak in touch_all_pages
authorPaolo Bonzini <pbonzini@redhat.com>
Mon, 4 Mar 2024 22:48:17 +0000 (23:48 +0100)
committerPaolo Bonzini <pbonzini@redhat.com>
Fri, 8 Mar 2024 14:51:22 +0000 (15:51 +0100)
touch_all_pages() can return early, before creating threads.  In this case,
however, it leaks the MemsetContext that it has allocated at the
beginning of the function.

Reported by Coverity as CID 1534922.

Fixes: 04accf43df8 ("oslib-posix: initialize backend memory objects in parallel", 2024-02-06)
Reviewed-by: Mark Kanda <mark.kanda@oracle.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
util/oslib-posix.c

index 3c379f96c26d6b55fe7114f791ece2afa2765272..e76441695bdc89c59c4040b2d56e943d401ec10d 100644 (file)
@@ -467,11 +467,13 @@ static int touch_all_pages(char *area, size_t hpagesize, size_t numpages,
          * preallocating synchronously.
          */
         if (context->num_threads == 1 && !async) {
+            ret = 0;
             if (qemu_madvise(area, hpagesize * numpages,
                              QEMU_MADV_POPULATE_WRITE)) {
-                return -errno;
+                ret = -errno;
             }
-            return 0;
+            g_free(context);
+            return ret;
         }
         touch_fn = do_madv_populate_write_pages;
     } else {