Browse Source

oslib-posix: fix memory leak in touch_all_pages

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>
Paolo Bonzini 1 year ago
parent
commit
44a90c0875
1 changed files with 4 additions and 2 deletions
  1. 4 2
      util/oslib-posix.c

+ 4 - 2
util/oslib-posix.c

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