From nobody Fri Apr 19 12:05:32 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 216.205.24.74 as permitted sender) client-ip=216.205.24.74; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-delivery-74.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.74 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=1584462527; cv=none; d=zohomail.com; s=zohoarc; b=J8N4QVmNopTtAAaPAzU5e5/QOe1oCPqKT7g06hKCv6r63u8wXrn5fxmVP2qQLQBwbB+Va0Mv0jWOdSbfQKTZf5yUqF6d9sPLt5kH1A4/V3avf3fbM6kllMqewD2/HBhaYTUNRRI2iKDOpi0xXHRACoMQOsq7IKgxXdvivV16IwI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1584462527; h=Content-Type:Content-Transfer-Encoding:Date:From:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=HbIcpmCLu+pHEz2apPL8P8B9jSPKyAEYmsRpj+YAvPs=; b=TGS4OYHX+XOtbRSmxaglG+bkArgUSP/LiCyMJ9d4mbbBe2y8RM8yQvGdn0YkT+eYv06psLTA2qRhPTbzQDz7Sz5Oi+4SJVjq0rmrwEZujcerR0Y56mdruoncxU3nOY/HVLtJxAkyQE4LgopVVC2dYkV7axSpGdPenhOpl9D9f+Y= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 216.205.24.74 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-74.mimecast.com (us-smtp-delivery-74.mimecast.com [216.205.24.74]) by mx.zohomail.com with SMTPS id 1584462527443469.8240427582557; Tue, 17 Mar 2020 09:28:47 -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-103-DAT0jyQQOZy3D-DqNn8Ksg-1; Tue, 17 Mar 2020 12:28:43 -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 0B371800D5A; Tue, 17 Mar 2020 16:28:37 +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 B3CE75D9E2; Tue, 17 Mar 2020 16:28:36 +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 1560187007; Tue, 17 Mar 2020 16:28:36 +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 02HGPiUA008607 for ; Tue, 17 Mar 2020 12:25:44 -0400 Received: by smtp.corp.redhat.com (Postfix) id 8B1FC90805; Tue, 17 Mar 2020 16:25:44 +0000 (UTC) Received: from lindworm.usersys.redhat.com (unknown [10.40.192.3]) by smtp.corp.redhat.com (Postfix) with ESMTPS id CF8C28FC12 for ; Tue, 17 Mar 2020 16:25:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1584462526; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=HbIcpmCLu+pHEz2apPL8P8B9jSPKyAEYmsRpj+YAvPs=; b=Qdo6hfLnaZepTBgsW9TR5CJjyeGdZE2REK7zSbwc6Hjib15OG135r7DQ2Tdw1dpWlZrMJy CP/JtYyiGbR8dOVK0NI+01hGJxsVJWQqnAx4GjIO1nREn+Q5sYNp30c3VuAT4H8sDtdmGd F1ZP1JMJ3F7GEGxvYT9G79s/pUDlhPk= X-MC-Unique: DAT0jyQQOZy3D-DqNn8Ksg-1 From: Pino Toscano To: libvir-list@redhat.com Subject: [PATCH] vmx: make 'fileName' optional for CD-ROMs Date: Tue, 17 Mar 2020 17:25:38 +0100 Message-Id: <20200317162538.1188916-1-ptoscano@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 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 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" It seems like CD-ROMs may have no 'fileName' property specified in case there is nothing configured as attachment for the drive. Hence, make sure that virVMXParseDisk() do not consider it mandatory anymore, considering it an empty block cdrom device. Sadly virVMXParseDisk() is used also to parse disk and floppies, so make sure that a NULL fileName is handled in cdrom-related paths. https://bugzilla.redhat.com/show_bug.cgi?id=3D1808610 Signed-off-by: Pino Toscano Reviewed-by-I-guess: Martin Kletzander Reviewed-by: J=C3=A1n Tomko --- src/vmx/vmx.c | 22 ++++++++++-------- .../vmx2xmldata/vmx2xml-cdrom-ide-empty-2.vmx | 4 ++++ .../vmx2xmldata/vmx2xml-cdrom-ide-empty-2.xml | 23 +++++++++++++++++++ tests/vmx2xmltest.c | 1 + 4 files changed, 40 insertions(+), 10 deletions(-) create mode 100644 tests/vmx2xmldata/vmx2xml-cdrom-ide-empty-2.vmx create mode 100644 tests/vmx2xmldata/vmx2xml-cdrom-ide-empty-2.xml diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index f0140129a2..58ae966fd4 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -2207,7 +2207,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptio= nPtr xmlopt, virConfPtr con goto cleanup; =20 /* vmx:fileName -> def:src, def:type */ - if (virVMXGetConfigString(conf, fileName_name, &fileName, false) < 0) + if (virVMXGetConfigString(conf, fileName_name, &fileName, true) < 0) goto cleanup; =20 /* vmx:writeThrough -> def:cachemode */ @@ -2218,7 +2218,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptio= nPtr xmlopt, virConfPtr con =20 /* Setup virDomainDiskDef */ if (device =3D=3D VIR_DOMAIN_DISK_DEVICE_DISK) { - if (virStringHasCaseSuffix(fileName, ".vmdk")) { + if (fileName && virStringHasCaseSuffix(fileName, ".vmdk")) { char *tmp; =20 if (deviceType !=3D NULL) { @@ -2254,7 +2254,8 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptio= nPtr xmlopt, virConfPtr con if (mode) (*def)->transient =3D STRCASEEQ(mode, "independent-nonpersistent"); - } else if (virStringHasCaseSuffix(fileName, ".iso") || + } else if (fileName =3D=3D NULL || + virStringHasCaseSuffix(fileName, ".iso") || STREQ(fileName, "emptyBackingString") || (deviceType && (STRCASEEQ(deviceType, "atapi-cdrom") || @@ -2277,7 +2278,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptio= nPtr xmlopt, virConfPtr con goto cleanup; } } else if (device =3D=3D VIR_DOMAIN_DISK_DEVICE_CDROM) { - if (virStringHasCaseSuffix(fileName, ".iso")) { + if (fileName && virStringHasCaseSuffix(fileName, ".iso")) { char *tmp; =20 if (deviceType && STRCASENEQ(deviceType, "cdrom-image")) { @@ -2295,7 +2296,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptio= nPtr xmlopt, virConfPtr con goto cleanup; } VIR_FREE(tmp); - } else if (virStringHasCaseSuffix(fileName, ".vmdk")) { + } else if (fileName && virStringHasCaseSuffix(fileName, ".vmdk")) { /* * This function was called in order to parse a CDROM device, = but * .vmdk files are for harddisk devices only. Just ignore it, @@ -2306,7 +2307,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptio= nPtr xmlopt, virConfPtr con } else if (deviceType && STRCASEEQ(deviceType, "atapi-cdrom")) { virDomainDiskSetType(*def, VIR_STORAGE_TYPE_BLOCK); =20 - if (STRCASEEQ(fileName, "auto detect")) { + if (fileName && STRCASEEQ(fileName, "auto detect")) { ignore_value(virDomainDiskSetSource(*def, NULL)); (*def)->startupPolicy =3D VIR_DOMAIN_STARTUP_POLICY_OPTION= AL; } else if (virDomainDiskSetSource(*def, fileName) < 0) { @@ -2317,7 +2318,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptio= nPtr xmlopt, virConfPtr con (*def)->device =3D VIR_DOMAIN_DISK_DEVICE_LUN; virDomainDiskSetType(*def, VIR_STORAGE_TYPE_BLOCK); =20 - if (STRCASEEQ(fileName, "auto detect")) { + if (fileName && STRCASEEQ(fileName, "auto detect")) { ignore_value(virDomainDiskSetSource(*def, NULL)); (*def)->startupPolicy =3D VIR_DOMAIN_STARTUP_POLICY_OPTION= AL; } else if (virDomainDiskSetSource(*def, fileName) < 0) { @@ -2325,7 +2326,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptio= nPtr xmlopt, virConfPtr con } } else if (busType =3D=3D VIR_DOMAIN_DISK_BUS_SCSI && deviceType && STRCASEEQ(deviceType, "scsi-passthru")) { - if (STRPREFIX(fileName, "/vmfs/devices/cdrom/")) { + if (fileName && STRPREFIX(fileName, "/vmfs/devices/cdrom/")) { /* SCSI-passthru CD-ROMs actually are device=3D'lun' */ (*def)->device =3D VIR_DOMAIN_DISK_DEVICE_LUN; virDomainDiskSetType(*def, VIR_STORAGE_TYPE_BLOCK); @@ -2341,7 +2342,7 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptio= nPtr xmlopt, virConfPtr con */ goto ignore; } - } else if (STREQ(fileName, "emptyBackingString")) { + } else if (fileName && STREQ(fileName, "emptyBackingString")) { if (deviceType && STRCASENEQ(deviceType, "cdrom-image")) { virReportError(VIR_ERR_INTERNAL_ERROR, _("Expecting VMX entry '%s' to be 'cdrom-im= age' " @@ -2355,7 +2356,8 @@ virVMXParseDisk(virVMXContext *ctx, virDomainXMLOptio= nPtr xmlopt, virConfPtr con virReportError(VIR_ERR_INTERNAL_ERROR, _("Invalid or not yet handled value '%s' " "for VMX entry '%s' for device type '%s'"), - fileName, fileName_name, + fileName ? fileName : "(not present)", + fileName_name, deviceType ? deviceType : "unknown"); goto cleanup; } diff --git a/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty-2.vmx b/tests/vmx2xm= ldata/vmx2xml-cdrom-ide-empty-2.vmx new file mode 100644 index 0000000000..36286cb20f --- /dev/null +++ b/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty-2.vmx @@ -0,0 +1,4 @@ +config.version =3D "8" +virtualHW.version =3D "4" +ide0:0.present =3D "true" +ide0:0.deviceType =3D "atapi-cdrom" diff --git a/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty-2.xml b/tests/vmx2xm= ldata/vmx2xml-cdrom-ide-empty-2.xml new file mode 100644 index 0000000000..af4a5ff9f6 --- /dev/null +++ b/tests/vmx2xmldata/vmx2xml-cdrom-ide-empty-2.xml @@ -0,0 +1,23 @@ + + 00000000-0000-0000-0000-000000000000 + 32768 + 32768 + 1 + + hvm + + + destroy + restart + destroy + + + +
+ + + + + diff --git a/tests/vmx2xmltest.c b/tests/vmx2xmltest.c index 8d7b8ba2a4..1966aed6fe 100644 --- a/tests/vmx2xmltest.c +++ b/tests/vmx2xmltest.c @@ -218,6 +218,7 @@ mymain(void) DO_TEST("cdrom-scsi-passthru", "cdrom-scsi-passthru"); DO_TEST("cdrom-ide-file", "cdrom-ide-file"); DO_TEST("cdrom-ide-empty", "cdrom-ide-empty"); + DO_TEST("cdrom-ide-empty-2", "cdrom-ide-empty-2"); DO_TEST("cdrom-ide-device", "cdrom-ide-device"); DO_TEST("cdrom-ide-raw-device", "cdrom-ide-raw-device"); DO_TEST("cdrom-ide-raw-auto-detect", "cdrom-ide-raw-auto-detect"); --=20 2.25.1