From nobody Wed May 15 15:06:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) client-ip=216.205.24.124; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-124.mimecast.com; Authentication-Results: mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1621413951; cv=none; d=zohomail.com; s=zohoarc; b=MoQR9p2TCC9PYWiRSGCIZ1B7g9CaAGyw71TML0UGeZut8g/mh+oD2YNX17pt4plULLasY2SrGHCRXjfwIkd3ip+hSV2gDqEtc3/HcJUR/5tymQpEy3brpbnk1KZrWACxlqh6wA+GpSM1Z01Zc2O7I3brLunuu/V486l2/CR/gf4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621413951; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=9EjAqzyGLb1vh2fGg1avNQr6MEi/B7PXAgnSr98ZzKw=; b=ZU2tjYC5NOzpW4VbfucdOn3lX9CwNrpQs5EvhbuLKlWbpE9RmspNtJitGesvRBZbQ3SnZu85wRnpxpbYNlFuon8mhtDHOMoYzkFvg4WZkD8rMY3/UUWo1/ebn46YhlFyIMnW77fx0yc5LHTxqPSeQYMY5prLgAJmbgVV5gwRoPM= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.zohomail.com with SMTPS id 1621413951040340.3560691333082; Wed, 19 May 2021 01:45:51 -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-579-hduMqW5QMn-gBF49KlNWqQ-1; Wed, 19 May 2021 04:45:47 -0400 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 96FEE801107; Wed, 19 May 2021 08:45:41 +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 7913E78633; Wed, 19 May 2021 08:45:41 +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 480F6180140D; Wed, 19 May 2021 08:45:41 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.rdu2.redhat.com [10.11.54.6]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 14J8guxh030815 for ; Wed, 19 May 2021 04:42:56 -0400 Received: by smtp.corp.redhat.com (Postfix) id 1B2A32157FC4; Wed, 19 May 2021 08:42:56 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast02.extmail.prod.ext.rdu2.redhat.com [10.11.55.18]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 165D72157FB4 for ; Wed, 19 May 2021 08:42:53 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [205.139.110.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 09A8E8007AC for ; Wed, 19 May 2021 08:42:53 +0000 (UTC) Received: from mo4-p00-ob.smtp.rzone.de (mo4-p00-ob.smtp.rzone.de [85.215.255.25]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-292-rs9gK9uTNfmNf-hphMJoAw-1; Wed, 19 May 2021 04:42:50 -0400 Received: from sender by smtp.strato.de (RZmta 47.26.1 AUTH) with ESMTPSA id c0ae88x4J8gm3B3 (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits)) (Client did not present a certificate); Wed, 19 May 2021 10:42:48 +0200 (CEST) X-MC-Unique: hduMqW5QMn-gBF49KlNWqQ-1 X-MC-Unique: rs9gK9uTNfmNf-hphMJoAw-1 X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgs09ValFcstyKtnZMLOo4jr88Zf5nXI1mYJUK+h" X-RZG-CLASS-ID: mo00 From: Olaf Hering To: libvir-list@redhat.com Subject: [PATCH v1] libxl: adjust handling of libxl_device_disk objects Date: Wed, 19 May 2021 10:42:46 +0200 Message-Id: <20210519084246.30535-1-olaf@aepfle.de> MIME-Version: 1.0 X-Mimecast-Impersonation-Protect: Policy=CLT - Impersonation Protection Definition; Similar Internal Domain=false; Similar Monitored External Domain=false; Custom External Domain=false; Mimecast External Domain=false; Newly Observed Domain=false; Internal User Name=false; Custom Display Name List=false; Reply-to Address Mismatch=false; Targeted Threat Dictionary=false; Mimecast Threat Dictionary=false; Custom Threat Dictionary=false X-Scanned-By: MIMEDefang 2.78 on 10.11.54.6 X-loop: libvir-list@redhat.com Cc: Olaf Hering 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.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=libvir-list-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" libxl objects are supposed to be initialized and disposed. Correct the usage of libxl_device_disk objects which are allocated on the stack. Initialize each one prior usage, and dispose them once done. Adjust libxlMakeDisk to use an already initialized object, it is owned by the caller. Adjust libxlMakeDiskList to initialize the list of objects, before they are filled by libxlMakeDisk. In case of error, the objects are disposed by libxl_domain_config_dispose. The usage of g_new0 is suspicious in the context of libxl because the memory allocated via glib is released with plain free() inside libxl. Signed-off-by: Olaf Hering --- src/libxl/libxl_conf.c | 22 +++++++++------------- src/libxl/libxl_driver.c | 6 ++++++ 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index 3149ee3b4a..2d2aab7e66 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -1114,8 +1114,6 @@ libxlMakeDisk(virDomainDiskDef *l_disk, libxl_device_= disk *x_disk) int format =3D virDomainDiskGetFormat(l_disk); int actual_type =3D virStorageSourceGetActualType(l_disk->src); =20 - libxl_device_disk_init(x_disk); - if (actual_type =3D=3D VIR_STORAGE_TYPE_NETWORK) { if (STRNEQ_NULLABLE(driver, "qemu")) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", @@ -1265,26 +1263,24 @@ libxlMakeDiskList(virDomainDef *def, libxl_domain_c= onfig *d_config) { virDomainDiskDef **l_disks =3D def->disks; int ndisks =3D def->ndisks; - libxl_device_disk *x_disks; size_t i; + int ret =3D -1; + + d_config->disks =3D g_new0(libxl_device_disk, ndisks); + d_config->num_disks =3D ndisks; =20 - x_disks =3D g_new0(libxl_device_disk, ndisks); + for (i =3D 0; i < ndisks; i++) + libxl_device_disk_init(&d_config->disks[i]); =20 for (i =3D 0; i < ndisks; i++) { - if (libxlMakeDisk(l_disks[i], &x_disks[i]) < 0) + if (libxlMakeDisk(l_disks[i], &d_config->disks[i]) < 0) goto error; } =20 - d_config->disks =3D x_disks; - d_config->num_disks =3D ndisks; - - return 0; + ret =3D 0; =20 error: - for (i =3D 0; i < ndisks; i++) - libxl_device_disk_dispose(&x_disks[i]); - VIR_FREE(x_disks); - return -1; + return ret; } =20 /* diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c index d54cd41785..2b844bb3b5 100644 --- a/src/libxl/libxl_driver.c +++ b/src/libxl/libxl_driver.c @@ -2978,6 +2978,7 @@ libxlDomainChangeEjectableMedia(virDomainObj *vm, vir= DomainDiskDef *disk) size_t i; int ret =3D -1; =20 + libxl_device_disk_init(&x_disk); for (i =3D 0; i < vm->def->ndisks; i++) { if (vm->def->disks[i]->bus =3D=3D disk->bus && STREQ(vm->def->disks[i]->dst, disk->dst)) { @@ -3018,6 +3019,7 @@ libxlDomainChangeEjectableMedia(virDomainObj *vm, vir= DomainDiskDef *disk) ret =3D 0; =20 cleanup: + libxl_device_disk_dispose(&x_disk); virObjectUnref(cfg); return ret; } @@ -3030,6 +3032,7 @@ libxlDomainAttachDeviceDiskLive(virDomainObj *vm, vir= DomainDeviceDef *dev) libxl_device_disk x_disk; int ret =3D -1; =20 + libxl_device_disk_init(&x_disk); switch (l_disk->device) { case VIR_DOMAIN_DISK_DEVICE_CDROM: ret =3D libxlDomainChangeEjectableMedia(vm, l_disk); @@ -3091,6 +3094,7 @@ libxlDomainAttachDeviceDiskLive(virDomainObj *vm, vir= DomainDeviceDef *dev) } =20 cleanup: + libxl_device_disk_dispose(&x_disk); virObjectUnref(cfg); return ret; } @@ -3329,6 +3333,7 @@ libxlDomainDetachDeviceDiskLive(virDomainObj *vm, vir= DomainDeviceDef *dev) int idx; int ret =3D -1; =20 + libxl_device_disk_init(&x_disk); switch (dev->data.disk->device) { case VIR_DOMAIN_DISK_DEVICE_DISK: if (dev->data.disk->bus =3D=3D VIR_DOMAIN_DISK_BUS_XEN) { @@ -3380,6 +3385,7 @@ libxlDomainDetachDeviceDiskLive(virDomainObj *vm, vir= DomainDeviceDef *dev) } =20 cleanup: + libxl_device_disk_dispose(&x_disk); virObjectUnref(cfg); return ret; }