From nobody Tue Nov 18 22:49:02 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1612806554; cv=none; d=zohomail.com; s=zohoarc; b=ejMTdFCECl6aSifXqfkBxWE5O+caaV30Ms42QcromWIoaiJCt6J3phs9YwUYRPGA/6Mf+8/xpAuEU4cByNrjv3ZpQhpGLit/iWG2059bIMo+b/75447Y1jikHeFsOZUBvQquh65C0cMsHkfwujAU1yn+7cSuWGoo/6LdmHSUqVo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1612806554; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=8TC0oIbcH2+Jl5Clk2QXKmW8utKg37UsUy5kd2yakaA=; b=bevWgU8u03zFyB4gLQXbwh6RdhVEkPXqBPjMdUnsGzSfbKdDqsw05Jh6m+KTLL0aFbLHT/rfKv9EadVtitEorPxR1JsPG1ZR325ZcuRF2Yo7+jZFoHBfcnVo4JbMiDOm8krojPN/iO3wAkiYOCAi+G5Qg0mANWOqBt25GD0ov4I= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1612806554388421.96624339015; Mon, 8 Feb 2021 09:49:14 -0800 (PST) Received: from localhost ([::1]:34366 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l9Aev-0004HC-5G for importer@patchew.org; Mon, 08 Feb 2021 12:49:13 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:45042) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l94jp-0001Y8-Vu for qemu-devel@nongnu.org; Mon, 08 Feb 2021 06:29:55 -0500 Received: from us-smtp-delivery-124.mimecast.com ([216.205.24.124]:23852) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l94jd-0002D1-Aw for qemu-devel@nongnu.org; Mon, 08 Feb 2021 06:29:53 -0500 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-17-Ucd7tgPgOu6Jtr098o74AQ-1; Mon, 08 Feb 2021 06:29:37 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id D824E107ACC7; Mon, 8 Feb 2021 11:29:35 +0000 (UTC) Received: from dgilbert-t580.localhost (ovpn-115-22.ams2.redhat.com [10.36.115.22]) by smtp.corp.redhat.com (Postfix) with ESMTP id D26D41002388; Mon, 8 Feb 2021 11:29:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1612783779; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=8TC0oIbcH2+Jl5Clk2QXKmW8utKg37UsUy5kd2yakaA=; b=h3qHzEFL5bamTzwtoYCywo91r2loPiG8Uvq+2DwArnO3aFenaYrxfjePOhSSTjPUI52RsL CONGR7G6DLQy593pc8ZzZ0zOrfCOkLrT7T1+ucmpy1JZ1kvtzhjh+xVdkFEtSSfiuP2oR4 O1ZiVCthcN496vzQl2FIE2ZKXvuH+Kg= X-MC-Unique: Ucd7tgPgOu6Jtr098o74AQ-1 From: "Dr. David Alan Gilbert (git)" To: qemu-devel@nongnu.org, andrey.gruzdev@virtuozzo.com, berrange@redhat.com, gaojinhao@huawei.com, armbru@redhat.com, mst@redhat.com, philmd@redhat.com, wainersm@redhat.com, s.reiter@proxmox.com Subject: [PULL 02/27] savevm: Fix memory leak of vmstate_configuration Date: Mon, 8 Feb 2021 11:28:53 +0000 Message-Id: <20210208112918.185058-3-dgilbert@redhat.com> In-Reply-To: <20210208112918.185058-1-dgilbert@redhat.com> References: <20210208112918.185058-1-dgilbert@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=dgilbert@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=216.205.24.124; envelope-from=dgilbert@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -33 X-Spam_score: -3.4 X-Spam_bar: --- X-Spam_report: (-3.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.569, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" From: Jinhao Gao When VM migrate VMState of configuration, the fields(name and capabilities) of configuration having a flag of VMS_ALLOC need to allocate memory. If the src doesn't free memory of capabilities in SaveState after save VMState of configuration, or the dst doesn't free memory of name and capabilities in p= ost load of configuration, it may result in memory leak of name and capabilitie= s. We free memory in configuration_post_save and configuration_post_load func, which prevents memory leak. Reported-by: Euler Robot Signed-off-by: Jinhao Gao Reviewed-by: Michael S. Tsirkin Message-Id: <20201231061020.828-3-gaojinhao@huawei.com> Signed-off-by: Dr. David Alan Gilbert --- migration/savevm.c | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/migration/savevm.c b/migration/savevm.c index 4f3b69ecfc..d1e6aaed60 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -315,6 +315,16 @@ static int configuration_pre_save(void *opaque) return 0; } =20 +static int configuration_post_save(void *opaque) +{ + SaveState *state =3D opaque; + + g_free(state->capabilities); + state->capabilities =3D NULL; + state->caps_count =3D 0; + return 0; +} + static int configuration_pre_load(void *opaque) { SaveState *state =3D opaque; @@ -365,24 +375,36 @@ static int configuration_post_load(void *opaque, int = version_id) { SaveState *state =3D opaque; const char *current_name =3D MACHINE_GET_CLASS(current_machine)->name; + int ret =3D 0; =20 if (strncmp(state->name, current_name, state->len) !=3D 0) { error_report("Machine type received is '%.*s' and local is '%s'", (int) state->len, state->name, current_name); - return -EINVAL; + ret =3D -EINVAL; + goto out; } =20 if (state->target_page_bits !=3D qemu_target_page_bits()) { error_report("Received TARGET_PAGE_BITS is %d but local is %d", state->target_page_bits, qemu_target_page_bits()); - return -EINVAL; + ret =3D -EINVAL; + goto out; } =20 if (!configuration_validate_capabilities(state)) { - return -EINVAL; + ret =3D -EINVAL; + goto out; } =20 - return 0; +out: + g_free((void *)state->name); + state->name =3D NULL; + state->len =3D 0; + g_free(state->capabilities); + state->capabilities =3D NULL; + state->caps_count =3D 0; + + return ret; } =20 static int get_capability(QEMUFile *f, void *pv, size_t size, @@ -516,6 +538,7 @@ static const VMStateDescription vmstate_configuration = =3D { .pre_load =3D configuration_pre_load, .post_load =3D configuration_post_load, .pre_save =3D configuration_pre_save, + .post_save =3D configuration_post_save, .fields =3D (VMStateField[]) { VMSTATE_UINT32(len, SaveState), VMSTATE_VBUFFER_ALLOC_UINT32(name, SaveState, 0, NULL, len), --=20 2.29.2