From nobody Wed May 15 14:33:24 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) client-ip=170.10.133.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 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1621505991; cv=none; d=zohomail.com; s=zohoarc; b=DlOItzFMd2F2BczQRPKUlcysadj+dQGvpyvzVUrdmH4F6bopKOph7B1AHKCGhvwBQY8RzbBj6/VEhueuYHo5k82Ksr1IaadCE5vR8jt+BpLAfrc+b6cJEqUzmravEYBbeiq3XyEdoF0AQpUC1Ix2PJuslTcfIjKa0bLYBwO9k9k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1621505991; 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=oDsIx/ErdPv/BcsOWEG6ZqowiCQsHxc+FtK3FlO4oMw=; b=SdHFc1oRq4zI5ZIO2wMrxu72a8m9I91JDJh3jX+6U0zqw0a47mOv4LteYO8aT6CyAwB234nereyKPziuwTFHDZiIxYDly1zjcBIR+6A9/OLo6sgpRhNsVPiTI/6RP20pbUhgIeBVghdwhrrVUMpFKULZqrCH+fJePmUzpfKODzI= ARC-Authentication-Results: i=1; mx.zohomail.com; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.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 [170.10.133.124]) by mx.zohomail.com with SMTPS id 1621505991161887.2983684436671; Thu, 20 May 2021 03:19: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-224-N3AmVG44OeS1p8HRT8SF6A-1; Thu, 20 May 2021 06:19:48 -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 624BD64160; Thu, 20 May 2021 10:19:43 +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 4FA376C330; Thu, 20 May 2021 10:19: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 C35C1180B463; Thu, 20 May 2021 10:19:39 +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 14KAHWFx018716 for ; Thu, 20 May 2021 06:17:32 -0400 Received: by smtp.corp.redhat.com (Postfix) id 302F32051B11; Thu, 20 May 2021 10:17:32 +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 2BC472051B18 for ; Thu, 20 May 2021 10:17:29 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [205.139.110.120]) (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 114A395F35D for ; Thu, 20 May 2021 10:17:29 +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-566-MIpTO6EKNqGgjIpcmtHBUQ-1; Thu, 20 May 2021 06:17:26 -0400 Received: from sender by smtp.strato.de (RZmta 47.26.1 AUTH) with ESMTPSA id y090b8x4KAHN1kg (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits)) (Client did not present a certificate); Thu, 20 May 2021 12:17:23 +0200 (CEST) X-MC-Unique: N3AmVG44OeS1p8HRT8SF6A-1 X-MC-Unique: MIpTO6EKNqGgjIpcmtHBUQ-1 X-RZG-AUTH: ":P2EQZWCpfu+qG7CngxMFH1J+3q8wa/QXkBR9MXjAuzpIG0mv9coXAgs09ValFcstyKtnZMLOo4jr88Zf5nXI1mYJUK+h" X-RZG-CLASS-ID: mo00 From: Olaf Hering To: libvir-list@redhat.com Subject: [PATCH v2] libxl: adjust handling of libxl_device_disk objects Date: Thu, 20 May 2021 12:17:20 +0200 Message-Id: <20210520101720.14305-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. Signed-off-by: Olaf Hering Reviewed-by: Jim Fehlig 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,18 @@ 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; =20 - x_disks =3D g_new0(libxl_device_disk, ndisks); + d_config->disks =3D g_new0(libxl_device_disk, ndisks); + d_config->num_disks =3D ndisks; =20 for (i =3D 0; i < ndisks; i++) { - if (libxlMakeDisk(l_disks[i], &x_disks[i]) < 0) - goto error; + libxl_device_disk_init(&d_config->disks[i]); + if (libxlMakeDisk(l_disks[i], &d_config->disks[i]) < 0) + return -1; } =20 - d_config->disks =3D x_disks; - d_config->num_disks =3D ndisks; - return 0; - - error: - for (i =3D 0; i < ndisks; i++) - libxl_device_disk_dispose(&x_disks[i]); - VIR_FREE(x_disks); - return -1; } =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; }