From nobody Mon Apr 29 05:41:55 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 205.139.110.61 as permitted sender) client-ip=205.139.110.61; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-1.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.61 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1599207895; cv=none; d=zohomail.com; s=zohoarc; b=LEfQd0bqIba0+XJLjQpgpqCo411UTXmMBP8RkcxOtbuQDetTAHGwFNE+Y0eviVg0MjGx3l8CXuZZw/pxFLgfUJxRDP04jvHdTnOaDrqaHm2fFYtlqol7D5VV1R6btUH28Z5RSqr3HiQ/yLgQ6pUEyYiyG165XOfOX/rqj4yA7/E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1599207895; 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=5qH3E0P/1tUtuN54o4zQQCLvTACiChbJxiQ4pOCKaKQ=; b=SvyFinjQFtE7eWpreEr6gydBfIOukGhvt4ACcLsyDAuRfvi7zc5AWp3Lf+nUYBIoaxUgmS16FqqHUCNSWI/cIOvuxsaBFSMcRWLvlbI/o+/aPHeF1nai26S4TKkIYDdvwuNP/PDQQOoGAXOOjAHkpYacaP2K7GgB0D2RTLmks00= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.61 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [205.139.110.61]) by mx.zohomail.com with SMTPS id 1599207895319976.8419795123889; Fri, 4 Sep 2020 01:24:55 -0700 (PDT) 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-240-It0MNXWPMPOWEtRQVt1TkA-1; Fri, 04 Sep 2020 04:24:52 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 5452D107465D; Fri, 4 Sep 2020 08:24:47 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0100C5D9CC; Fri, 4 Sep 2020 08:24:47 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 84D961832FC5; Fri, 4 Sep 2020 08:24:46 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 0848OT4r031221 for ; Fri, 4 Sep 2020 04:24:29 -0400 Received: by smtp.corp.redhat.com (Postfix) id 807D01A885; Fri, 4 Sep 2020 08:24:29 +0000 (UTC) Received: from localhost.localdomain (unknown [10.40.194.17]) by smtp.corp.redhat.com (Postfix) with ESMTP id E55971A4D6 for ; Fri, 4 Sep 2020 08:24:28 +0000 (UTC) X-MC-Unique: It0MNXWPMPOWEtRQVt1TkA-1 From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 1/3] qemu_interface: Fix @cfg refcounting in qemuInterfacePrepareSlirp() Date: Fri, 4 Sep 2020 10:24:21 +0200 Message-Id: <615af6e32fdeff65bd2ce860f208bedc33681ac4.1599207696.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Mimecast-Spam-Score: 0.001 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In the qemuInterfacePrepareSlirp() function, the qemu driver config is obtained (via virQEMUDriverGetConfig()), but it is never unrefed leading to mangled refcounter. Fixes: 9145b3f1cc334e946b3f9ea45d6c24c868301e6f Signed-off-by: Michal Privoznik Reviewed-by: Laine Stump --- src/qemu/qemu_interface.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qemu/qemu_interface.c b/src/qemu/qemu_interface.c index 10a87a2528..ddd4ee2731 100644 --- a/src/qemu/qemu_interface.c +++ b/src/qemu/qemu_interface.c @@ -643,7 +643,7 @@ qemuSlirpPtr qemuInterfacePrepareSlirp(virQEMUDriverPtr driver, virDomainNetDefPtr net) { - virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); g_autoptr(qemuSlirp) slirp =3D NULL; size_t i; =20 --=20 2.26.2 From nobody Mon Apr 29 05:41:55 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 205.139.110.61 as permitted sender) client-ip=205.139.110.61; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-1.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.61 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1599207900; cv=none; d=zohomail.com; s=zohoarc; b=ZwYVgU7+h84sJnkkhdkny192IgEa3wsnNQcXn0GXVjXMTZX4nu2GsxMxrbhTLGKwMl6LaygcLQjPck2Nd7eg4T7Qx34aCLAsF1FKAVSmufRv4TE4yhxFDIgBfwjIUn500I8ddeMFoteiDDRHN1eaq16ZQveaDJdchkLoNubcRXA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1599207900; 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=LqrAHs4XFTS5lgfAkNGkgivJAqdv5SjxmBEQCLOy/+A=; b=nio5AOHKs68sff0GbsbwKacqChyWVthLfdZbfF5NhQKOOWDRpBa4Rvt9P0S+Cwsltc/RRotO4L0VKzlMxGUkQ7H0ulyw5BWbGd6sH5BYmwOCHCPZUQdFCtEZQkCbPZ47WrqrvQ382atLaAW7jnrTJKbYHMEe3xqGBPT3PIEvXVM= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 205.139.110.61 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [205.139.110.61]) by mx.zohomail.com with SMTPS id 1599207900312537.5838356166162; Fri, 4 Sep 2020 01:25:00 -0700 (PDT) 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-298-n4w8W227PTmNKRWQLqVX1w-1; Fri, 04 Sep 2020 04:24:57 -0400 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 8CCB6839A48; Fri, 4 Sep 2020 08:24:49 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 683381002D66; Fri, 4 Sep 2020 08:24:49 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 30F011832FD2; Fri, 4 Sep 2020 08:24:49 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 0848OU5a031233 for ; Fri, 4 Sep 2020 04:24:30 -0400 Received: by smtp.corp.redhat.com (Postfix) id A98EF1A885; Fri, 4 Sep 2020 08:24:30 +0000 (UTC) Received: from localhost.localdomain (unknown [10.40.194.17]) by smtp.corp.redhat.com (Postfix) with ESMTP id E02F01A4D6 for ; Fri, 4 Sep 2020 08:24:29 +0000 (UTC) X-MC-Unique: n4w8W227PTmNKRWQLqVX1w-1 From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 2/3] lib: Prefer g_autoptr() declaration of virQEMUDriverConfigPtr Date: Fri, 4 Sep 2020 10:24:22 +0200 Message-Id: <62b569052547392c4e79161af96fd36beb5e77e3.1599207696.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Mimecast-Spam-Score: 0.001 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In the past we had to declare @cfg and then explicitly unref it. But now, with glib we can use g_autoptr() which will do the unref automatically and thus is more bulletproof. Signed-off-by: Michal Privoznik Reviewed-by: Laine Stump --- src/qemu/qemu_conf.h | 6 +----- src/qemu/qemu_hostdev.c | 4 +--- src/qemu/qemu_interface.c | 9 +++------ src/qemu/qemu_migration.c | 8 ++------ src/qemu/qemu_migration_cookie.c | 4 +--- tests/domaincapstest.c | 4 +--- tests/qemuxml2xmltest.c | 2 +- 7 files changed, 10 insertions(+), 27 deletions(-) diff --git a/src/qemu/qemu_conf.h b/src/qemu/qemu_conf.h index 687829123c..1d7afa8738 100644 --- a/src/qemu/qemu_conf.h +++ b/src/qemu/qemu_conf.h @@ -64,13 +64,9 @@ typedef virQEMUDriverConfig *virQEMUDriverConfigPtr; * being released while they use it. * * eg - * qemuDriverLock(driver); - * virQEMUDriverConfigPtr cfg =3D virObjectRef(driver->config); - * qemuDriverUnlock(driver); + * g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); * * ...do stuff with 'cfg'.. - * - * virObjectUnref(cfg); */ struct _virQEMUDriverConfig { virObject parent; diff --git a/src/qemu/qemu_hostdev.c b/src/qemu/qemu_hostdev.c index d39f9d7584..721fe5da82 100644 --- a/src/qemu/qemu_hostdev.c +++ b/src/qemu/qemu_hostdev.c @@ -405,14 +405,12 @@ qemuHostdevReAttachPCIDevices(virQEMUDriverPtr driver, virDomainHostdevDefPtr *hostdevs, int nhostdevs) { - virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); const char *oldStateDir =3D cfg->stateDir; virHostdevManagerPtr hostdev_mgr =3D driver->hostdevMgr; =20 virHostdevReAttachPCIDevices(hostdev_mgr, QEMU_DRIVER_NAME, name, hostdevs, nhostdevs, oldStateDir); - - virObjectUnref(cfg); } =20 void diff --git a/src/qemu/qemu_interface.c b/src/qemu/qemu_interface.c index ddd4ee2731..cbf3d99981 100644 --- a/src/qemu/qemu_interface.c +++ b/src/qemu/qemu_interface.c @@ -261,7 +261,7 @@ qemuInterfaceDirectConnect(virDomainDefPtr def, { int ret =3D -1; char *res_ifname =3D NULL; - virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); unsigned int macvlan_create_flags =3D VIR_NETDEV_MACVLAN_CREATE_WITH_T= AP; =20 if (qemuInterfaceIsVnetCompatModel(net)) @@ -290,7 +290,6 @@ qemuInterfaceDirectConnect(virDomainDefPtr def, while (tapfdSize--) VIR_FORCE_CLOSE(tapfd[tapfdSize]); } - virObjectUnref(cfg); return ret; } =20 @@ -413,7 +412,7 @@ qemuInterfaceEthernetConnect(virDomainDefPtr def, int ret =3D -1; unsigned int tap_create_flags =3D VIR_NETDEV_TAP_CREATE_IFUP; bool template_ifname =3D false; - virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); const char *tunpath =3D "/dev/net/tun"; const char *auditdev =3D tunpath; =20 @@ -514,7 +513,6 @@ qemuInterfaceEthernetConnect(virDomainDefPtr def, if (template_ifname) VIR_FREE(net->ifname); } - virObjectUnref(cfg); =20 return ret; } @@ -542,7 +540,7 @@ qemuInterfaceBridgeConnect(virDomainDefPtr def, int ret =3D -1; unsigned int tap_create_flags =3D VIR_NETDEV_TAP_CREATE_IFUP; bool template_ifname =3D false; - virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); const char *tunpath =3D "/dev/net/tun"; =20 if (net->backend.tap) { @@ -633,7 +631,6 @@ qemuInterfaceBridgeConnect(virDomainDefPtr def, if (template_ifname) VIR_FREE(net->ifname); } - virObjectUnref(cfg); =20 return ret; } diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c index 142faa2cf9..1e80a22db6 100644 --- a/src/qemu/qemu_migration.c +++ b/src/qemu/qemu_migration.c @@ -3101,11 +3101,9 @@ qemuMigrationSrcConfirm(virQEMUDriverPtr driver, int cancelled) { qemuMigrationJobPhase phase; - virQEMUDriverConfigPtr cfg =3D NULL; + g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); int ret =3D -1; =20 - cfg =3D virQEMUDriverGetConfig(driver); - if (!qemuMigrationJobIsActive(vm, QEMU_ASYNC_JOB_MIGRATION_OUT)) goto cleanup; =20 @@ -3133,7 +3131,6 @@ qemuMigrationSrcConfirm(virQEMUDriverPtr driver, =20 cleanup: virDomainObjEndAPI(&vm); - virObjectUnref(cfg); return ret; } =20 @@ -3928,7 +3925,7 @@ qemuMigrationSrcPerformTunnel(virQEMUDriverPtr driver, { int ret =3D -1; qemuMigrationSpec spec; - virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); int fds[2] =3D { -1, -1 }; =20 VIR_DEBUG("driver=3D%p, vm=3D%p, st=3D%p, cookiein=3D%s, cookieinlen= =3D%d, " @@ -3969,7 +3966,6 @@ qemuMigrationSrcPerformTunnel(virQEMUDriverPtr driver, VIR_FORCE_CLOSE(spec.dest.fd.qemu); VIR_FORCE_CLOSE(spec.dest.fd.local); =20 - virObjectUnref(cfg); return ret; } =20 diff --git a/src/qemu/qemu_migration_cookie.c b/src/qemu/qemu_migration_coo= kie.c index cef2555988..3ea46e1527 100644 --- a/src/qemu/qemu_migration_cookie.c +++ b/src/qemu/qemu_migration_cookie.c @@ -194,7 +194,7 @@ qemuMigrationCookieGraphicsSpiceAlloc(virQEMUDriverPtr = driver, { qemuMigrationCookieGraphicsPtr mig =3D NULL; const char *listenAddr; - virQEMUDriverConfigPtr cfg =3D virQEMUDriverGetConfig(driver); + g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); =20 if (VIR_ALLOC(mig) < 0) goto error; @@ -215,12 +215,10 @@ qemuMigrationCookieGraphicsSpiceAlloc(virQEMUDriverPt= r driver, =20 mig->listen =3D g_strdup(listenAddr); =20 - virObjectUnref(cfg); return mig; =20 error: qemuMigrationCookieGraphicsFree(mig); - virObjectUnref(cfg); return NULL; } =20 diff --git a/tests/domaincapstest.c b/tests/domaincapstest.c index b060f47f7f..d2ed820cf9 100644 --- a/tests/domaincapstest.c +++ b/tests/domaincapstest.c @@ -371,7 +371,7 @@ mymain(void) #endif =20 #if WITH_QEMU - virQEMUDriverConfigPtr cfg =3D virQEMUDriverConfigNew(false, NULL); + g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverConfigNew(false, N= ULL); =20 if (!cfg) return EXIT_FAILURE; @@ -453,8 +453,6 @@ mymain(void) * file has been added, run "VIR_TEST_REGENERATE_OUTPUT=3D1 ninja test= ". */ =20 - virObjectUnref(cfg); - virFileWrapperClearPrefixes(); =20 #endif /* WITH_QEMU */ diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c index 6eb008c8d2..39a9da874f 100644 --- a/tests/qemuxml2xmltest.c +++ b/tests/qemuxml2xmltest.c @@ -132,7 +132,7 @@ mymain(void) { int ret =3D 0; g_autofree char *fakerootdir =3D NULL; - virQEMUDriverConfigPtr cfg =3D NULL; + g_autoptr(virQEMUDriverConfig) cfg =3D NULL; g_autoptr(virHashTable) capslatest =3D NULL; g_autoptr(virConnect) conn =3D NULL; =20 --=20 2.26.2 From nobody Mon Apr 29 05:41:55 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) client-ip=207.211.31.81; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-1.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1599207882; cv=none; d=zohomail.com; s=zohoarc; b=H4H5wP3Q9ySHUFYwJz7eBxCxjkmltBTK2le/Tam/TxsxBQXSAlG+o5axFVxU5ooiV/HDiwAUfdkGzxtfwtAEF5lfdN179DKi1pailMcYGivrNdZAhWBK1jJcoKrBawj64BJRNJFg0BIvS3h3rfQm8y7OxWWmWactJiSztOosi/w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1599207882; 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=YfFA03A68hq5s36Ok41ZlwV3igwEBwdgUoIECmJwohM=; b=D9X4yK+Pu/1Uno0hszNnH45qLXRTWY72nU2tnE4APUGjmI+hcu1laK8VHlsI7UNmAW7vUB7mpDyHqAHOC3IGEJvxdj38ySwju5GtbLATLbiJYkIapFiBHHoufkmktXeakj3IazZ2G+YuAwXG4RptpjKYnAgNljl2GFvpvtUEkyI= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.81 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-delivery-1.mimecast.com (us-smtp-2.mimecast.com [207.211.31.81]) by mx.zohomail.com with SMTPS id 1599207882921838.13298747549; Fri, 4 Sep 2020 01:24:42 -0700 (PDT) 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-205-_tF1xpQ3PkyrPoc-2ryaaw-1; Fri, 04 Sep 2020 04:24:40 -0400 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 50FB180EDA6; Fri, 4 Sep 2020 08:24:35 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 0A7F060C07; Fri, 4 Sep 2020 08:24:35 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id CA80B79875; Fri, 4 Sep 2020 08:24:34 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 0848OVZx031244 for ; Fri, 4 Sep 2020 04:24:31 -0400 Received: by smtp.corp.redhat.com (Postfix) id 9EEE41A885; Fri, 4 Sep 2020 08:24:31 +0000 (UTC) Received: from localhost.localdomain (unknown [10.40.194.17]) by smtp.corp.redhat.com (Postfix) with ESMTP id 11F031A4D6 for ; Fri, 4 Sep 2020 08:24:30 +0000 (UTC) X-MC-Unique: _tF1xpQ3PkyrPoc-2ryaaw-1 From: Michal Privoznik To: libvir-list@redhat.com Subject: [PATCH 3/3] qemu_namespace: Don't leak mknod items that are being skipped over Date: Fri, 4 Sep 2020 10:24:23 +0200 Message-Id: <8f78f2793cc8a40fc41fec6ddb967bc0ab6f0502.1599207696.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.84 on 10.5.11.23 X-loop: libvir-list@redhat.com X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Mimecast-Spam-Score: 0.001 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" When building and populating domain NS a couple of functions is called that append paths to a string list. This string list is then inspected, one item at the time by qemuNamespacePrepareOneItem() which gathers all the info for given path (stat buffer, possible link target, ACLs, SELinux label) using qemuNamespaceMknodItemInit(). If the path needs to be created in the domain's private /dev then it's added onto this qemuNamespaceMknodData list which is freed later in the process. But, if the path does not need to be created in the domain's private /dev, then the memory allocated by qemuNamespaceMknodItemInit() is not freed anywhere leading to a leak. Signed-off-by: Michal Privoznik Reviewed-by: Laine Stump --- Honestly, I think this patch looks ugly. Ideas are welcome. src/qemu/qemu_namespace.c | 42 +++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 11 deletions(-) diff --git a/src/qemu/qemu_namespace.c b/src/qemu/qemu_namespace.c index 87f4fd8d58..917e140f6a 100644 --- a/src/qemu/qemu_namespace.c +++ b/src/qemu/qemu_namespace.c @@ -1166,22 +1166,29 @@ qemuNamespacePrepareOneItem(qemuNamespaceMknodDataP= tr data, size_t ndevMountsPath) { long ttl =3D sysconf(_SC_SYMLOOP_MAX); - const char *next =3D file; + g_autofree char *next =3D g_strdup(file); size_t i; =20 while (1) { qemuNamespaceMknodItem item =3D { 0 }; + bool added =3D false; + bool isLink; int rc; =20 rc =3D qemuNamespaceMknodItemInit(&item, cfg, vm, next); - if (rc =3D=3D -2) { - /* @file doesn't exist. We can break here. */ - break; - } else if (rc < 0) { + if (rc < 0) { + qemuNamespaceMknodItemClear(&item); + + if (rc =3D=3D -2) { + /* @file doesn't exist. We can break here. */ + break; + } /* Some other (critical) error. */ return -1; } =20 + isLink =3D S_ISLNK(item.sb.st_mode); + if (STRPREFIX(next, QEMU_DEVPREFIX)) { for (i =3D 0; i < ndevMountsPath; i++) { if (STREQ(devMountsPath[i], "/dev")) @@ -1190,22 +1197,35 @@ qemuNamespacePrepareOneItem(qemuNamespaceMknodDataP= tr data, break; } =20 - if (i =3D=3D ndevMountsPath && - VIR_APPEND_ELEMENT_COPY(data->items, data->nitems, item) <= 0) - return -1; + if (i =3D=3D ndevMountsPath) { + if (VIR_APPEND_ELEMENT_COPY(data->items, data->nitems, ite= m) < 0) { + qemuNamespaceMknodItemClear(&item); + return -1; + } + added =3D true; + } } =20 - if (!S_ISLNK(item.sb.st_mode)) + if (!isLink) { + if (!added) + qemuNamespaceMknodItemClear(&item); break; + } =20 if (ttl-- =3D=3D 0) { + if (!added) + qemuNamespaceMknodItemClear(&item); virReportSystemError(ELOOP, _("Too many levels of symbolic links: %s"= ), - next); + file); return -1; } =20 - next =3D item.target; + g_free(next); + next =3D g_strdup(item.target); + + if (!added) + qemuNamespaceMknodItemClear(&item); } =20 return 0; --=20 2.26.2