From nobody Tue Nov 18 07:49:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 ARC-Seal: i=1; a=rsa-sha256; t=1609153763; cv=none; d=zohomail.com; s=zohoarc; b=iIweUOyM2ib07/cUUgmMX8Ws7YAIJhg6MEKt9VvMCIiQYknhB/xt0TY941gXwPBtoJZJxdlD2pl4njqVoZPo9767BZ3WH22ZDX1Y0DF6gKcBhD2MgnP2tICaNEQve6btlRRlcUOl98jROX1pYEm7GAy8464UWvaIE0uQegS+v08= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1609153763; h=Content-Type:Content-Transfer-Encoding:Cc: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=Dey2Ad9gIj4s4zpgQU3oNewhtQm8upsI0VfBhJREVFQ=; b=YUKXQ124jTCN6VNtFLwB4kOp2uIFhRbRYHW0CVxCAvlWffngTsjKyd6kJW8ADlxHYPEsS+URF75PbNwDbfzW7t5q6u7qBI1/zvZXkSWq8OUr/VwWa7Xx1qTC4Te96IEeFTFr3Q2f0kRhHMU6dbxweHYJnaREYHSvTm8GvymGAdw= ARC-Authentication-Results: i=1; mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1609153763832269.35607793723557; Mon, 28 Dec 2020 03:09:23 -0800 (PST) Received: from localhost ([::1]:37594 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ktoVz-0006l0-10 for importer@patchew.org; Mon, 28 Dec 2020 04:08:31 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36890) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ktoTD-0002jW-5o; Mon, 28 Dec 2020 04:05:39 -0500 Received: from szxga06-in.huawei.com ([45.249.212.32]:2578) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ktoTA-0002Xm-NL; Mon, 28 Dec 2020 04:05:38 -0500 Received: from DGGEMS401-HUB.china.huawei.com (unknown [172.30.72.59]) by szxga06-in.huawei.com (SkyGuard) with ESMTP id 4D4BSl5jG5zhyR2; Mon, 28 Dec 2020 17:04:39 +0800 (CST) Received: from DESKTOP-EDHIELA.china.huawei.com (10.174.187.50) by DGGEMS401-HUB.china.huawei.com (10.3.19.201) with Microsoft SMTP Server id 14.3.498.0; Mon, 28 Dec 2020 17:05:07 +0800 From: g00517791 To: , Subject: [PATCH v2 1/3] spapr_pci: Fix memory leak of vmstate_spapr_pci Date: Mon, 28 Dec 2020 17:00:51 +0800 Message-ID: <20201228090053.346-2-gaojinhao@huawei.com> X-Mailer: git-send-email 2.29.2.windows.2 In-Reply-To: <20201228090053.346-1-gaojinhao@huawei.com> References: <20201228090053.346-1-gaojinhao@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.174.187.50] X-CFilter-Loop: Reflected 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=45.249.212.32; envelope-from=gaojinhao@huawei.com; helo=szxga06-in.huawei.com X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham 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: , Cc: Stefan Berger , Jason Wang , "Michael S . Tsirkin" , Greg Kurz , "Dr . David Alan Gilbert" , Juan Quintela , wanghaibin.wang@huawei.com, =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , zhukeqian1@huawei.com, David Gibson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Jinhao Gao When VM migrate VMState of spapr_pci, the field(msi_devs) of spapr_pci having a flag of VMS_ALLOC need to allocate memory. If the src doesn't free memory of msi_devs in SaveStateEntry of spapr_pci after QEMUFile save VMState of spapr_pci, it may result in memory leak of msi_devs. We add the post_save func to free memory, which prevents memory leak. Signed-off-by: Jinhao Gao Acked-by: David Gibson Reviewed-by: Michael S. Tsirkin --- hw/ppc/spapr_pci.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c index 76d7c91e9c..1b2b940606 100644 --- a/hw/ppc/spapr_pci.c +++ b/hw/ppc/spapr_pci.c @@ -2173,6 +2173,16 @@ static int spapr_pci_pre_save(void *opaque) return 0; } =20 +static int spapr_pci_post_save(void *opaque) +{ + SpaprPhbState *sphb =3D opaque; + + g_free(sphb->msi_devs); + sphb->msi_devs =3D NULL; + sphb->msi_devs_num =3D 0; + return 0; +} + static int spapr_pci_post_load(void *opaque, int version_id) { SpaprPhbState *sphb =3D opaque; @@ -2205,6 +2215,7 @@ static const VMStateDescription vmstate_spapr_pci =3D= { .version_id =3D 2, .minimum_version_id =3D 2, .pre_save =3D spapr_pci_pre_save, + .post_save =3D spapr_pci_post_save, .post_load =3D spapr_pci_post_load, .fields =3D (VMStateField[]) { VMSTATE_UINT64_EQUAL(buid, SpaprPhbState, NULL), --=20 2.23.0 From nobody Tue Nov 18 07:49:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 ARC-Seal: i=1; a=rsa-sha256; t=1609153152; cv=none; d=zohomail.com; s=zohoarc; b=Oc3ieVFeQX69MqVQ1i8fFHpB1Y/RLxk5JLpeS5XgEIDbNWaVg+B+elzTG/Q8oOCEjQAxnYkh0eH5iWrCTnPsr/ThryAzKzdW7QCm7xU0FO8QrpADeowq2FbhGcs/u6XFcDKiF2DSg9iTk1P5ihQlUiJNZS3Nz4d4ao1bVWIjRm8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1609153152; h=Content-Type:Content-Transfer-Encoding:Cc: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=8bJ6do8x2rxUfcwEtaI3U8yxFU1IkipNzl0L0h7L11I=; b=aN7qOenDXSv6fzFwG0BH345p6TTIy2sawTXuWNUxL8Fw6S+QDHVMHcU918tqf9yCyBKiCDnX1N1U/tnvT5dEcea0IWygrpEq1qmzUmPpQgi3+xOhRlDrLDFi2sg83uS5fTipy0lRVQ9NHCuH77Vz3ULH6ptQ3YeQAs6d8U0tdYU= ARC-Authentication-Results: i=1; mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1609153152922668.0522495573326; Mon, 28 Dec 2020 02:59:12 -0800 (PST) Received: from localhost ([::1]:59240 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ktoUV-0003op-CE for importer@patchew.org; Mon, 28 Dec 2020 04:06:59 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36874) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ktoT3-0002bK-IW; Mon, 28 Dec 2020 04:05:29 -0500 Received: from szxga06-in.huawei.com ([45.249.212.32]:2577) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ktoT0-0002Xn-HR; Mon, 28 Dec 2020 04:05:29 -0500 Received: from DGGEMS401-HUB.china.huawei.com (unknown [172.30.72.59]) by szxga06-in.huawei.com (SkyGuard) with ESMTP id 4D4BSl6HqxzhyRG; Mon, 28 Dec 2020 17:04:39 +0800 (CST) Received: from DESKTOP-EDHIELA.china.huawei.com (10.174.187.50) by DGGEMS401-HUB.china.huawei.com (10.3.19.201) with Microsoft SMTP Server id 14.3.498.0; Mon, 28 Dec 2020 17:05:08 +0800 From: g00517791 To: , Subject: [PATCH v2 2/3] savevm: Fix memory leak of vmstate_configuration Date: Mon, 28 Dec 2020 17:00:52 +0800 Message-ID: <20201228090053.346-3-gaojinhao@huawei.com> X-Mailer: git-send-email 2.29.2.windows.2 In-Reply-To: <20201228090053.346-1-gaojinhao@huawei.com> References: <20201228090053.346-1-gaojinhao@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.174.187.50] X-CFilter-Loop: Reflected 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=45.249.212.32; envelope-from=gaojinhao@huawei.com; helo=szxga06-in.huawei.com X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham 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: , Cc: Stefan Berger , Jason Wang , "Michael S . Tsirkin" , Greg Kurz , "Dr . David Alan Gilbert" , Juan Quintela , wanghaibin.wang@huawei.com, =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , zhukeqian1@huawei.com, David Gibson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" 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. Signed-off-by: Jinhao Gao Reviewed-by: Michael S. Tsirkin --- migration/savevm.c | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/migration/savevm.c b/migration/savevm.c index 5f937a2762..13f1a5dab7 100644 --- a/migration/savevm.c +++ b/migration/savevm.c @@ -314,6 +314,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; @@ -364,24 +374,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, @@ -515,6 +537,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.23.0 From nobody Tue Nov 18 07:49:12 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 ARC-Seal: i=1; a=rsa-sha256; t=1609147882; cv=none; d=zohomail.com; s=zohoarc; b=GjAgpUfX1hJmDg0xYgoJ9Hnt1rxCG5/Gm4fF+53OV5QuD04WWbcjyj8BIWx+CzdJ/A2uoP0SN/VQDALOnLrScouzezpzvJXLF43wU2MJX81HqarjNAj1SG8JN2sB7Bs0DObloiCFG6aBCfoGQmpou21xJ4MpUkRlZXmBt371ye8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1609147882; h=Content-Type:Content-Transfer-Encoding:Cc: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=RKUsP139jji8mCvfLBlFAp6NeJsimOeSSQUVJnwosHM=; b=II/RU/2v7pSkgIH68JYZ3RFKUFf0xVjvh9hXmCQYDqdZ35eGQf3ow+HIQi7oq7ARL1JgjtUImeggcBzzvxb2KTD3HkqEi9Hsms0xz/UiNE6KQ4hKTS/95Q889MLrs9gZ2C6sCmgIYAeI5EnIC22p/HjO2/eYBPDXKyVkDFdfNaQ= ARC-Authentication-Results: i=1; mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1609147882065569.9901256437531; Mon, 28 Dec 2020 01:31:22 -0800 (PST) Received: from localhost ([::1]:37142 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ktoVs-0006Uf-0p for importer@patchew.org; Mon, 28 Dec 2020 04:08:24 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:36876) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ktoT5-0002cJ-7x; Mon, 28 Dec 2020 04:05:31 -0500 Received: from szxga05-in.huawei.com ([45.249.212.191]:3015) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ktoSz-0002Xl-NC; Mon, 28 Dec 2020 04:05:31 -0500 Received: from DGGEMS401-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4D4BSZ2zdSzj0HC; Mon, 28 Dec 2020 17:04:30 +0800 (CST) Received: from DESKTOP-EDHIELA.china.huawei.com (10.174.187.50) by DGGEMS401-HUB.china.huawei.com (10.3.19.201) with Microsoft SMTP Server id 14.3.498.0; Mon, 28 Dec 2020 17:05:09 +0800 From: g00517791 To: , Subject: [PATCH v2 3/3] vmstate: Fix memory leak in vmstate_handle_alloc() Date: Mon, 28 Dec 2020 17:00:53 +0800 Message-ID: <20201228090053.346-4-gaojinhao@huawei.com> X-Mailer: git-send-email 2.29.2.windows.2 In-Reply-To: <20201228090053.346-1-gaojinhao@huawei.com> References: <20201228090053.346-1-gaojinhao@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [10.174.187.50] X-CFilter-Loop: Reflected 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=45.249.212.191; envelope-from=gaojinhao@huawei.com; helo=szxga05-in.huawei.com X-Spam_score_int: -41 X-Spam_score: -4.2 X-Spam_bar: ---- X-Spam_report: (-4.2 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham 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: , Cc: Stefan Berger , Jason Wang , "Michael S . Tsirkin" , Greg Kurz , "Dr . David Alan Gilbert" , Juan Quintela , wanghaibin.wang@huawei.com, =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , zhukeqian1@huawei.com, David Gibson Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Type: text/plain; charset="utf-8" From: Jinhao Gao Some memory allocated for fields having a flag of VMS_ALLOC in SaveState may not free before VM load vmsd in migration. So we pre-free memory before allocation in vmstate_handle_alloc() to avoid memleaks. Signed-off-by: Jinhao Gao Signed-off-by: Michael S. Tsirkin --- migration/vmstate.c | 1 + 1 file changed, 1 insertion(+) diff --git a/migration/vmstate.c b/migration/vmstate.c index e9d2aef66b..873f76739f 100644 --- a/migration/vmstate.c +++ b/migration/vmstate.c @@ -70,6 +70,7 @@ static void vmstate_handle_alloc(void *ptr, const VMState= Field *field, gsize size =3D vmstate_size(opaque, field); size *=3D vmstate_n_elems(opaque, field); if (size) { + g_free(*(void **)ptr); *(void **)ptr =3D g_malloc(size); } } --=20 2.23.0