From nobody Mon Feb 9 15:09:03 2026 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; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 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=1644951470; cv=none; d=zohomail.com; s=zohoarc; b=mxcoIx0t8QPQYzFubN47qQ17Y5L7EewW1Ugf9C3AkPRq1JwXdu/v2cOgu8HAZVA0jQV8TY/5YxyK0nYFHfEOO/B/ImBz4vki6SEsa9pZCW6hh/zoruYK3UC6WqmM8bzT9xFooSZbQVYj84F9HAUid7GgkXX5HTl2K0W8dcJo4y4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1644951470; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=HbNe+/t3edBV9jQp4fyF2veQY1mFbVz19oEEIRlt1Q0=; b=adeASEfOs1LAbzVAzQlalI6O2xFAJjdO1/Ry5J2RM9qQ8zA+DmgRCFfKU1AJzNUQr1rFC0p60QqppswLHG9FYnXjzv3Vtg3At1CtJ+tiUwo9JgR6D76u1uJp9a8c+UH5wQ2MyKthqWIEWOh32pbCaDYE1Ki0NsL5WXXnoxtXqdM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 170.10.133.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) 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 1644951470568402.2790302180565; Tue, 15 Feb 2022 10:57:50 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-642-iwwKXUVPM0-n5Cl9axTbnQ-1; Tue, 15 Feb 2022 13:57:45 -0500 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 41EA5801B0C; Tue, 15 Feb 2022 18:57:40 +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 221087E91C; Tue, 15 Feb 2022 18:57:40 +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 E3EB91802E34; Tue, 15 Feb 2022 18:57:39 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 21FIt7tw029825 for ; Tue, 15 Feb 2022 13:55:07 -0500 Received: by smtp.corp.redhat.com (Postfix) id 30392838F6; Tue, 15 Feb 2022 18:55:07 +0000 (UTC) Received: from localhost.localdomain.com (unknown [10.39.196.6]) by smtp.corp.redhat.com (Postfix) with ESMTP id 541A9838E5; Tue, 15 Feb 2022 18:55:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1644951469; 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: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=HbNe+/t3edBV9jQp4fyF2veQY1mFbVz19oEEIRlt1Q0=; b=cLjOqZ9POiLXWnhxnXNJUvTXJ/Lm/mKx0pyccAVhvfGf6tLG8M+QQBF5rf5AesCyehRype YLBX54sB7/Y18n75G6O0hlw3h9C3cS43Azl0vZ7n46I/Vx0fUVuIm7ljYsLpAzLtusXxQL hQztbeYBDbyyZDzH5v08ZX6eJZOHbBs= X-MC-Unique: iwwKXUVPM0-n5Cl9axTbnQ-1 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: libvir-list@redhat.com Subject: [libvirt PATCH 10/10] conf: stop ignoring / with firmware auto-select Date: Tue, 15 Feb 2022 18:54:38 +0000 Message-Id: <20220215185438.1720571-11-berrange@redhat.com> In-Reply-To: <20220215185438.1720571-1-berrange@redhat.com> References: <20220215185438.1720571-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 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.12 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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1644951472329100001 Currently if the firmware attribute is set then we silently ignore most of the and element configs. This changes the code so that we always fully parse the and but then use a post-parse method to explicitly reject invalid combinations. Signed-off-by: Daniel P. Berrang=C3=A9 --- src/conf/domain_conf.c | 50 ++++++++++---- .../os-firmware-efi-bad-loader-path.err | 1 + .../os-firmware-efi-bad-loader-path.xml | 67 ++++++++++++++++++ .../os-firmware-efi-bad-loader-type.err | 1 + .../os-firmware-efi-bad-loader-type.xml | 67 ++++++++++++++++++ .../os-firmware-efi-bad-nvram-template.err | 1 + .../os-firmware-efi-bad-nvram-template.xml | 68 +++++++++++++++++++ tests/qemuxml2argvtest.c | 3 + 8 files changed, 243 insertions(+), 15 deletions(-) create mode 100644 tests/qemuxml2argvdata/os-firmware-efi-bad-loader-path.= err create mode 100644 tests/qemuxml2argvdata/os-firmware-efi-bad-loader-path.= xml create mode 100644 tests/qemuxml2argvdata/os-firmware-efi-bad-loader-type.= err create mode 100644 tests/qemuxml2argvdata/os-firmware-efi-bad-loader-type.= xml create mode 100644 tests/qemuxml2argvdata/os-firmware-efi-bad-nvram-templa= te.err create mode 100644 tests/qemuxml2argvdata/os-firmware-efi-bad-nvram-templa= te.xml diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index ac2e068aea..542c9bda12 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -4828,6 +4828,30 @@ virDomainDefPostParseOs(virDomainDef *def) } =20 if (def->os.firmware !=3D VIR_DOMAIN_OS_DEF_FIRMWARE_NONE) { + if (def->os.loader->path) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("Loader path is not permitted with firmware a= ttribute")); + return -1; + } + + if (def->os.loader->type) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("Loader type is not permitted with firmware a= ttribute")); + return -1; + } + + if (def->os.loader->readonly) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("Loader read-only attribute is not permitted = with firmware attribute")); + return -1; + } + + if (def->os.loader->nvramTemplate) { + virReportError(VIR_ERR_XML_ERROR, "%s", + _("NVRAM template path is not permitted with fi= rmware attribute")); + return -1; + } + if (def->os.loader->nvram) { virReportError(VIR_ERR_XML_ERROR, "%s", _("NVRAM path is not permitted with firmware at= tribute")); @@ -17818,7 +17842,6 @@ virDomainLoaderDefParseXML(virDomainDef *def, { xmlNodePtr loader_node =3D virXPathNode("./os/loader[1]", ctxt); xmlNodePtr nvram_node =3D virXPathNode("./os/nvram[1]", ctxt); - const bool fwAutoSelect =3D def->os.firmware !=3D VIR_DOMAIN_OS_DEF_FI= RMWARE_NONE; virDomainLoaderDef *loader; =20 if (!loader_node && !nvram_node) @@ -17827,21 +17850,19 @@ virDomainLoaderDefParseXML(virDomainDef *def, def->os.loader =3D loader =3D g_new0(virDomainLoaderDef, 1); =20 if (loader_node) { - if (!fwAutoSelect) { - if (virXMLPropTristateBool(loader_node, "readonly", VIR_XML_PR= OP_NONE, - &loader->readonly) < 0) - return -1; + if (virXMLPropTristateBool(loader_node, "readonly", VIR_XML_PROP_N= ONE, + &loader->readonly) < 0) + return -1; =20 - if (virXMLPropEnum(loader_node, "type", virDomainLoaderTypeFro= mString, - VIR_XML_PROP_NONZERO, &loader->type) < 0) - return -1; + if (virXMLPropEnum(loader_node, "type", virDomainLoaderTypeFromStr= ing, + VIR_XML_PROP_NONZERO, &loader->type) < 0) + return -1; =20 - if (!(loader->path =3D virXMLNodeContentString(loader_node))) - return -1; + if (!(loader->path =3D virXMLNodeContentString(loader_node))) + return -1; =20 - if (STREQ(loader->path, "")) - VIR_FREE(loader->path); - } + if (STREQ(loader->path, "")) + VIR_FREE(loader->path); =20 if (virXMLPropTristateBool(loader_node, "secure", VIR_XML_PROP_NON= E, &loader->secure) < 0) @@ -17855,8 +17876,7 @@ virDomainLoaderDefParseXML(virDomainDef *def, if (STREQ(loader->nvram, "")) VIR_FREE(loader->nvram); =20 - if (!fwAutoSelect) - loader->nvramTemplate =3D virXMLPropString(nvram_node, "templa= te"); + loader->nvramTemplate =3D virXMLPropString(nvram_node, "template"); } =20 return 0; diff --git a/tests/qemuxml2argvdata/os-firmware-efi-bad-loader-path.err b/t= ests/qemuxml2argvdata/os-firmware-efi-bad-loader-path.err new file mode 100644 index 0000000000..a8dbd0d6d8 --- /dev/null +++ b/tests/qemuxml2argvdata/os-firmware-efi-bad-loader-path.err @@ -0,0 +1 @@ +XML error: Loader path is not permitted with firmware attribute diff --git a/tests/qemuxml2argvdata/os-firmware-efi-bad-loader-path.xml b/t= ests/qemuxml2argvdata/os-firmware-efi-bad-loader-path.xml new file mode 100644 index 0000000000..02eec67c35 --- /dev/null +++ b/tests/qemuxml2argvdata/os-firmware-efi-bad-loader-path.xml @@ -0,0 +1,67 @@ + + fedora + 63840878-0deb-4095-97e6-fc444d9bc9fa + 8192 + 8192 + 1 + + hvm + /some/path + + + + + + + + + + destroy + restart + restart + + + + + + /usr/bin/qemu-system-x86_64 + +
+ + + +
+ + + +
+ + + +
+ + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + diff --git a/tests/qemuxml2argvdata/os-firmware-efi-bad-loader-type.err b/t= ests/qemuxml2argvdata/os-firmware-efi-bad-loader-type.err new file mode 100644 index 0000000000..2824399628 --- /dev/null +++ b/tests/qemuxml2argvdata/os-firmware-efi-bad-loader-type.err @@ -0,0 +1 @@ +XML error: Loader type is not permitted with firmware attribute diff --git a/tests/qemuxml2argvdata/os-firmware-efi-bad-loader-type.xml b/t= ests/qemuxml2argvdata/os-firmware-efi-bad-loader-type.xml new file mode 100644 index 0000000000..9091a2a8ce --- /dev/null +++ b/tests/qemuxml2argvdata/os-firmware-efi-bad-loader-type.xml @@ -0,0 +1,67 @@ + + fedora + 63840878-0deb-4095-97e6-fc444d9bc9fa + 8192 + 8192 + 1 + + hvm + + + + + + + + + + + destroy + restart + restart + + + + + + /usr/bin/qemu-system-x86_64 + +
+ + + +
+ + + +
+ + + +
+ + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + diff --git a/tests/qemuxml2argvdata/os-firmware-efi-bad-nvram-template.err = b/tests/qemuxml2argvdata/os-firmware-efi-bad-nvram-template.err new file mode 100644 index 0000000000..866ef34ec4 --- /dev/null +++ b/tests/qemuxml2argvdata/os-firmware-efi-bad-nvram-template.err @@ -0,0 +1 @@ +XML error: NVRAM template path is not permitted with firmware attribute diff --git a/tests/qemuxml2argvdata/os-firmware-efi-bad-nvram-template.xml = b/tests/qemuxml2argvdata/os-firmware-efi-bad-nvram-template.xml new file mode 100644 index 0000000000..cf77ca5433 --- /dev/null +++ b/tests/qemuxml2argvdata/os-firmware-efi-bad-nvram-template.xml @@ -0,0 +1,68 @@ + + fedora + 63840878-0deb-4095-97e6-fc444d9bc9fa + 8192 + 8192 + 1 + + hvm + + /some/vars + + + + + + + + + + destroy + restart + restart + + + + + + /usr/bin/qemu-system-x86_64 + +
+ + + +
+ + + +
+ + + +
+ + +
+ + + + +
+ + + + +
+ + + + +
+ + + + +
+ + + diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c index 8909dcd064..82105892b0 100644 --- a/tests/qemuxml2argvtest.c +++ b/tests/qemuxml2argvtest.c @@ -3478,7 +3478,10 @@ mymain(void) =20 DO_TEST_CAPS_LATEST("os-firmware-bios"); DO_TEST_CAPS_LATEST("os-firmware-efi"); + DO_TEST_PARSE_ERROR_NOCAPS("os-firmware-efi-bad-loader-path"); + DO_TEST_PARSE_ERROR_NOCAPS("os-firmware-efi-bad-loader-type"); DO_TEST_PARSE_ERROR_NOCAPS("os-firmware-efi-bad-nvram-path"); + DO_TEST_PARSE_ERROR_NOCAPS("os-firmware-efi-bad-nvram-template"); DO_TEST_CAPS_LATEST("os-firmware-efi-secboot"); DO_TEST_CAPS_LATEST("os-firmware-efi-no-enrolled-keys"); DO_TEST_CAPS_ARCH_LATEST("aarch64-os-firmware-efi", "aarch64"); --=20 2.34.1