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 {