qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Memory leak in spapr_machine_init()?


From: Markus Armbruster
Subject: Memory leak in spapr_machine_init()?
Date: Thu, 18 Jun 2020 08:55:53 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)

Either I'm confused (quite possible), or kvmppc_check_papr_resize_hpt()
can leak an Error object on failure.  Please walk through the code with
me:

        kvmppc_check_papr_resize_hpt(&resize_hpt_err);

This sets @resize_hpt_err on failure.

        if (spapr->resize_hpt == SPAPR_RESIZE_HPT_DEFAULT) {
            /*
             * If the user explicitly requested a mode we should either
             * supply it, or fail completely (which we do below).  But if
             * it's not set explicitly, we reset our mode to something
             * that works
             */
            if (resize_hpt_err) {
                spapr->resize_hpt = SPAPR_RESIZE_HPT_DISABLED;
                error_free(resize_hpt_err);
                resize_hpt_err = NULL;

Case 1: failure and SPAPR_RESIZE_HPT_DEFAULT; we free @resize_hpt_err.
Good.

            } else {
                spapr->resize_hpt = smc->resize_hpt_default;
            }
        }

        assert(spapr->resize_hpt != SPAPR_RESIZE_HPT_DEFAULT);

        if ((spapr->resize_hpt != SPAPR_RESIZE_HPT_DISABLED) && resize_hpt_err) 
{
            /*
             * User requested HPT resize, but this host can't supply it.  Bail 
out
             */
            error_report_err(resize_hpt_err);
            exit(1);

Case 2: failure and not SPAPR_RESIZE_HPT_DISABLED; fatal.  Good.

        }

What about case 3: failure and SPAPR_RESIZE_HPT_DISABLED?

Good if we get here via case 1 (we freed @resize_hpt_err).

Else, ???




reply via email to

[Prev in Thread] Current Thread [Next in Thread]