From nobody Fri Jan 9 08:52:40 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1766968040; cv=none; d=zohomail.com; s=zohoarc; b=TB8pG4Rav1d+p1bafB772gG35chrvZMar+OC5yodaJD+DGwkVZKuDS223vaE8xfFjQ7wdPFOUq+xCGdk7kcWraHlWFOC9DlbdQOGiKQ6z80Jpto7MOAd5JjGo6SfzL/wv+pI8NDxZhuwO9s3/GA4ZqmPjYOKG+maSZ7g7k/sqjc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1766968040; h=Content-Type:Content-Transfer-Encoding:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=yAiBiOskQSFI0m2eSxLZQYhWUANW7gVepMrkLfbK2iQ=; b=bEMXBiZaJOa13YsWfIombWuRmLR1RKyIRFD9Wy3RmCW7WKWtObeB0PS0dhRDummLzahI8wjwwzZEjE5TiNGXW+j7bd1F5p6hdRww98+gN+w8eJf/Otqlw+56J9RHnonTwfae+XnTRf4qG1I8x6pW1ClAs6ouRT+N3ayJsbQyg8Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 176696804023623.863502105552357; Sun, 28 Dec 2025 16:27:20 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id 3200F418B0; Sun, 28 Dec 2025 19:27:19 -0500 (EST) Received: from [172.19.199.83] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id E33D3418FA; Sun, 28 Dec 2025 19:13:54 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 66899417F7; Sun, 28 Dec 2025 18:34:58 -0500 (EST) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id D118B3F2B4 for ; Sun, 28 Dec 2025 18:34:56 -0500 (EST) Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-456-ZmcAyZLJMQe4ugZfYnnIxA-1; Sun, 28 Dec 2025 18:34:52 -0500 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 1BDAB19560B2 for ; Sun, 28 Dec 2025 23:34:48 +0000 (UTC) Received: from harajuku.usersys.redhat.com.homenet.telecomitalia.it (unknown [10.45.224.19]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 4403930001B9 for ; Sun, 28 Dec 2025 23:34:47 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-5.0 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1766964896; h=from:from: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: in-reply-to:in-reply-to:references:references; bh=yAiBiOskQSFI0m2eSxLZQYhWUANW7gVepMrkLfbK2iQ=; b=f3NVKz5xGgiS4M0dOOQoXIVnjYzjz6IPPLQ/hq8ED/MYmFaOggYq1NXuW2IPMLoaMiHVvl Agfqqpxda+uktFGs5DK9FnVLWJZ0qEtWtFXE90rMNzAo3gGsOdjOJmVNTP3G22WXonh7al o/ALm8Pw8IuQ6oTOj9giKGYlCdzi2YQ= X-MC-Unique: ZmcAyZLJMQe4ugZfYnnIxA-1 X-Mimecast-MFC-AGG-ID: ZmcAyZLJMQe4ugZfYnnIxA_1766964888 To: devel@lists.libvirt.org Subject: [PATCH 27/36] qemu_firmware: Retain user-specified NVRAM format Date: Mon, 29 Dec 2025 00:34:03 +0100 Message-ID: <20251228233412.1709869-28-abologna@redhat.com> In-Reply-To: <20251228233412.1709869-1-abologna@redhat.com> References: <20251228233412.1709869-1-abologna@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: dRZp_KltyICVtF6R5GVyddIwHKN3NLEDbK-0--mZ7y8_1766964888 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: DQ6LFJXHOUDNXXYDGQG5BIY6Z4GXXFUC X-Message-ID-Hash: DQ6LFJXHOUDNXXYDGQG5BIY6Z4GXXFUC X-MailFrom: abologna@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Andrea Bolognani via Devel Reply-To: Andrea Bolognani X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1766968041462158500 Content-Type: text/plain; charset="utf-8"; x-default="true" Right now we throw the entire definition away if the path is not present, including the format. This effectively results in discarding user-provided information. This change fixes the firmware-auto-efi-format-mismatch test case. Until now, the NVRAM format ended up being raw (matching the NVRAM template) despite the user explicitly asking for it to be qcow2 instead. While this means that libvirt will no longer be able to start such a VM without user intervention, since it does not automatically perform conversion between formats, that's still preferrable to silently overriding an explicit user's request. Signed-off-by: Andrea Bolognani --- src/qemu/qemu_firmware.c | 18 +++++++++++++----- ...auto-efi-format-mismatch.x86_64-latest.args | 5 +++-- ...-auto-efi-format-mismatch.x86_64-latest.xml | 2 +- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c index b08fb95585..dca0a79868 100644 --- a/src/qemu/qemu_firmware.c +++ b/src/qemu/qemu_firmware.c @@ -971,6 +971,7 @@ qemuFirmwareEnsureNVRAM(virDomainDef *def, { g_autoptr(virQEMUDriverConfig) cfg =3D virQEMUDriverGetConfig(driver); virDomainLoaderDef *loader =3D def->os.loader; + virStorageFileFormat nvramFormat =3D VIR_STORAGE_FILE_NONE; const char *ext =3D NULL; =20 if (!loader) @@ -999,19 +1000,26 @@ qemuFirmwareEnsureNVRAM(virDomainDef *def, return; } =20 - /* otherwise we want to reset and re-populate the definition */ + /* Otherwise we want to reset and re-populate the definition. + * In this case we still retain a single piece of information: + * the user-provided NVRAM format */ + nvramFormat =3D loader->nvram->format; + virObjectUnref(loader->nvram); } =20 loader->nvram =3D virStorageSourceNew(); loader->nvram->type =3D VIR_STORAGE_TYPE_FILE; + loader->nvram->format =3D nvramFormat; =20 /* The nvram template format should be always present but as a failsaf= e, * duplicate the loader format if it is not available. */ - if (loader->nvramTemplateFormat > VIR_STORAGE_FILE_NONE) - loader->nvram->format =3D loader->nvramTemplateFormat; - else - loader->nvram->format =3D loader->format; + if (!loader->nvram->format) { + if (loader->nvramTemplateFormat) + loader->nvram->format =3D loader->nvramTemplateFormat; + else + loader->nvram->format =3D loader->format; + } =20 if (loader->nvram->format =3D=3D VIR_STORAGE_FILE_RAW) { /* The extension used by raw edk2 builds has historically diff --git a/tests/qemuxmlconfdata/firmware-auto-efi-format-mismatch.x86_64= -latest.args b/tests/qemuxmlconfdata/firmware-auto-efi-format-mismatch.x86_= 64-latest.args index e7c9110c95..468d7ee048 100644 --- a/tests/qemuxmlconfdata/firmware-auto-efi-format-mismatch.x86_64-latest= .args +++ b/tests/qemuxmlconfdata/firmware-auto-efi-format-mismatch.x86_64-latest= .args @@ -12,8 +12,9 @@ XDG_CONFIG_HOME=3D/var/lib/libvirt/qemu/domain--1-guest/.= config \ -object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/va= r/lib/libvirt/qemu/domain--1-guest/master-key.aes"}' \ -blockdev '{"driver":"file","filename":"/usr/share/edk2/ovmf/OVMF_CODE.sec= boot.fd","node-name":"libvirt-pflash0-storage","auto-read-only":true,"disca= rd":"unmap"}' \ -blockdev '{"node-name":"libvirt-pflash0-format","read-only":true,"driver"= :"raw","file":"libvirt-pflash0-storage"}' \ --blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/guest_= VARS.fd","node-name":"libvirt-pflash1-storage","read-only":false}' \ --machine pc-q35-10.0,usb=3Doff,smm=3Don,dump-guest-core=3Doff,memory-backe= nd=3Dpc.ram,pflash0=3Dlibvirt-pflash0-format,pflash1=3Dlibvirt-pflash1-stor= age,acpi=3Don \ +-blockdev '{"driver":"file","filename":"/var/lib/libvirt/qemu/nvram/guest_= VARS.qcow2","node-name":"libvirt-pflash1-storage","auto-read-only":true,"di= scard":"unmap"}' \ +-blockdev '{"node-name":"libvirt-pflash1-format","read-only":false,"driver= ":"qcow2","file":"libvirt-pflash1-storage","backing":null}' \ +-machine pc-q35-10.0,usb=3Doff,smm=3Don,dump-guest-core=3Doff,memory-backe= nd=3Dpc.ram,pflash0=3Dlibvirt-pflash0-format,pflash1=3Dlibvirt-pflash1-form= at,acpi=3Don \ -accel kvm \ -cpu qemu64 \ -global driver=3Dcfi.pflash01,property=3Dsecure,value=3Don \ diff --git a/tests/qemuxmlconfdata/firmware-auto-efi-format-mismatch.x86_64= -latest.xml b/tests/qemuxmlconfdata/firmware-auto-efi-format-mismatch.x86_6= 4-latest.xml index f4df8c07ed..3a7536db2a 100644 --- a/tests/qemuxmlconfdata/firmware-auto-efi-format-mismatch.x86_64-latest= .xml +++ b/tests/qemuxmlconfdata/firmware-auto-efi-format-mismatch.x86_64-latest= .xml @@ -11,7 +11,7 @@ /usr/share/edk2/ovmf/OVMF_CODE.secboot.fd - /var/lib/libvirt/qemu/nvram/guest_VARS.fd + /var/lib/libvirt/qemu/nvram/guest_VARS.qcow= 2 --=20 2.52.0