diff mbox series

oslib-posix: fix memory leak in touch_all_pages

Message ID 20240304224857.268503-1-pbonzini@redhat.com (mailing list archive)
State New, archived
Headers show
Series oslib-posix: fix memory leak in touch_all_pages | expand

Commit Message

Paolo Bonzini March 4, 2024, 10:48 p.m. UTC
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)
Cc: Mark Kanda <mark.kanda@oracle.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
---
 util/oslib-posix.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Mark Kanda March 5, 2024, 12:51 a.m. UTC | #1
On 3/4/24 4:48 PM, Paolo Bonzini wrote:
> 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)
> Cc: Mark Kanda<mark.kanda@oracle.com>
> Signed-off-by: Paolo Bonzini<pbonzini@redhat.com>
Reviewed-by: Mark Kanda <mark.kanda@oracle.com>

Thanks/regards,
-Mark
> ---
>   util/oslib-posix.c | 6 ++++--
>   1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/util/oslib-posix.c b/util/oslib-posix.c
> index 3c379f96c26..e76441695bd 100644
> --- a/util/oslib-posix.c
> +++ b/util/oslib-posix.c
> @@ -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 {
diff mbox series

Patch

diff --git a/util/oslib-posix.c b/util/oslib-posix.c
index 3c379f96c26..e76441695bd 100644
--- a/util/oslib-posix.c
+++ b/util/oslib-posix.c
@@ -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 {