From nobody Thu May 15 09:41:25 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1510230064147194.88023486273937; Thu, 9 Nov 2017 04:21:04 -0800 (PST) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 8B4B3C04AC5F; Thu, 9 Nov 2017 12:21:02 +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 115ED5FFF1; Thu, 9 Nov 2017 12:21:02 +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 9DD224BB78; Thu, 9 Nov 2017 12:20:59 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id vA9CKvNV026804 for ; Thu, 9 Nov 2017 07:20:57 -0500 Received: by smtp.corp.redhat.com (Postfix) id 5563B6A83B; Thu, 9 Nov 2017 12:20:57 +0000 (UTC) Received: from angien.brq.redhat.com (unknown [10.43.2.136]) by smtp.corp.redhat.com (Postfix) with ESMTP id A648269103; Thu, 9 Nov 2017 12:20:56 +0000 (UTC) From: Peter Krempa To: libvir-list@redhat.com Date: Thu, 9 Nov 2017 13:20:31 +0100 Message-Id: <16a41edf670d63c67236a90c8d97b26f7514ff67.1510229931.git.pkrempa@redhat.com> In-Reply-To: References: In-Reply-To: References: X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Cc: Peter Krempa Subject: [libvirt] [PATCH 2/4] qemu: Tolerate storage source private data being NULL 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: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Thu, 09 Nov 2017 12:21:03 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" In some cases it does not make sense to pursue that the private data will be allocated (especially when we don't need to put anything in it). Ensure that the code works without it. This also fixes few crashes pointed out in https://bugzilla.redhat.com/show_bug.cgi?id=3D1510323 --- src/qemu/qemu_command.c | 18 ++++++++++++++---- src/qemu/qemu_hotplug.c | 17 ++++++++++++----- 2 files changed, 26 insertions(+), 9 deletions(-) diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 364196783..49a7b92fc 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -1501,12 +1501,17 @@ qemuBuildDriveSourceStr(virDomainDiskDefPtr disk, { int actualType =3D virStorageSourceGetActualType(disk->src); qemuDomainStorageSourcePrivatePtr srcpriv =3D QEMU_DOMAIN_STORAGE_SOUR= CE_PRIVATE(disk->src); - qemuDomainSecretInfoPtr secinfo =3D srcpriv->secinfo; - qemuDomainSecretInfoPtr encinfo =3D srcpriv->encinfo; + qemuDomainSecretInfoPtr secinfo =3D NULL; + qemuDomainSecretInfoPtr encinfo =3D NULL; virJSONValuePtr srcprops =3D NULL; char *source =3D NULL; int ret =3D -1; + if (srcpriv) { + secinfo =3D srcpriv->secinfo; + encinfo =3D srcpriv->encinfo; + } + if (qemuDiskSourceNeedsProps(disk->src) && !(srcprops =3D qemuDiskSourceGetProps(disk->src))) goto cleanup; @@ -2183,8 +2188,13 @@ qemuBuildDiskDriveCommandLine(virCommandPtr cmd, bool driveBoot =3D false; virDomainDiskDefPtr disk =3D def->disks[i]; qemuDomainStorageSourcePrivatePtr srcPriv =3D QEMU_DOMAIN_STORAGE_= SOURCE_PRIVATE(disk->src); - qemuDomainSecretInfoPtr secinfo =3D srcPriv->secinfo; - qemuDomainSecretInfoPtr encinfo =3D srcPriv->encinfo; + qemuDomainSecretInfoPtr secinfo =3D NULL; + qemuDomainSecretInfoPtr encinfo =3D NULL; + + if (srcPriv) { + secinfo =3D srcPriv->secinfo; + encinfo =3D srcPriv->encinfo; + } if (disk->info.bootIndex) { bootindex =3D disk->info.bootIndex; diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index ce63b4a4d..72a57d89e 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -259,6 +259,7 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver, qemuDomainObjPrivatePtr priv =3D vm->privateData; qemuDomainDiskPrivatePtr diskPriv =3D QEMU_DOMAIN_DISK_PRIVATE(disk); qemuDomainStorageSourcePrivatePtr srcPriv =3D QEMU_DOMAIN_STORAGE_SOUR= CE_PRIVATE(disk->src); + qemuDomainSecretInfoPtr secinfo =3D NULL; const char *format =3D NULL; char *sourcestr =3D NULL; @@ -268,6 +269,9 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver, goto cleanup; } + if (srcPriv) + secinfo =3D srcPriv->secinfo; + if (disk->device !=3D VIR_DOMAIN_DISK_DEVICE_FLOPPY && disk->device !=3D VIR_DOMAIN_DISK_DEVICE_CDROM) { virReportError(VIR_ERR_INTERNAL_ERROR, @@ -300,7 +304,7 @@ qemuDomainChangeEjectableMedia(virQEMUDriverPtr driver, } if (!virStorageSourceIsEmpty(newsrc)) { - if (qemuGetDriveSourceString(newsrc, srcPriv->secinfo, &sourcestr)= < 0) + if (qemuGetDriveSourceString(newsrc, secinfo, &sourcestr) < 0) goto error; if (virStorageSourceGetActualType(newsrc) !=3D VIR_STORAGE_TYPE_DI= R) { @@ -371,8 +375,8 @@ qemuDomainAttachDiskGeneric(virConnectPtr conn, virJSONValuePtr secobjProps =3D NULL; virJSONValuePtr encobjProps =3D NULL; qemuDomainStorageSourcePrivatePtr srcPriv; - qemuDomainSecretInfoPtr secinfo; - qemuDomainSecretInfoPtr encinfo; + qemuDomainSecretInfoPtr secinfo =3D NULL; + qemuDomainSecretInfoPtr encinfo =3D NULL; if (qemuDomainPrepareDisk(driver, vm, disk, NULL, false) < 0) goto cleanup; @@ -384,13 +388,16 @@ qemuDomainAttachDiskGeneric(virConnectPtr conn, goto error; srcPriv =3D QEMU_DOMAIN_STORAGE_SOURCE_PRIVATE(disk->src); - secinfo =3D srcPriv->secinfo; + if (srcPriv) { + secinfo =3D srcPriv->secinfo; + encinfo =3D srcPriv->encinfo; + } + if (secinfo && secinfo->type =3D=3D VIR_DOMAIN_SECRET_INFO_TYPE_AES) { if (qemuBuildSecretInfoProps(secinfo, &secobjProps) < 0) goto error; } - encinfo =3D srcPriv->encinfo; if (encinfo && qemuBuildSecretInfoProps(encinfo, &encobjProps) < 0) goto error; --=20 2.14.3 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list