From nobody Tue Feb 10 12:58:29 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 170.10.129.124 as permitted sender) client-ip=170.10.129.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.129.124 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=fail(p=none dis=none) header.from=nutanix.com Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by mx.zohomail.com with SMTPS id 164944017903021.750204108274602; Fri, 8 Apr 2022 10:49:39 -0700 (PDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-93-BZkjoM_sNQO3wMuboo3s5w-1; Fri, 08 Apr 2022 13:49:27 -0400 Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.rdu2.redhat.com [10.11.54.10]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id F2D1718A6589; Fri, 8 Apr 2022 17:49:22 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com [10.30.29.100]) by smtp.corp.redhat.com (Postfix) with ESMTP id 4850B40317B; Fri, 8 Apr 2022 17:49:21 +0000 (UTC) Received: from mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (localhost [IPv6:::1]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id 09F001940344; Fri, 8 Apr 2022 17:49:21 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx09.intmail.prod.int.rdu2.redhat.com [10.11.54.9]) by mm-prod-listman-01.mail-001.prod.us-east-1.aws.redhat.com (Postfix) with ESMTP id C77D71940341 for ; Fri, 8 Apr 2022 17:49:19 +0000 (UTC) Received: by smtp.corp.redhat.com (Postfix) id A1B74432467; Fri, 8 Apr 2022 17:49:19 +0000 (UTC) Received: from mimecast-mx02.redhat.com (mimecast05.extmail.prod.ext.rdu2.redhat.com [10.11.55.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 9CD44432460 for ; Fri, 8 Apr 2022 17:49:19 +0000 (UTC) Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.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 7F2C98039D7 for ; Fri, 8 Apr 2022 17:49:19 +0000 (UTC) Received: from mx0a-002c1b01.pphosted.com (mx0a-002c1b01.pphosted.com [148.163.151.68]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id us-mta-651-XwXGkO8TP2ufbagblXr7YA-1; Fri, 08 Apr 2022 13:49:17 -0400 Received: from pps.filterd (m0127838.ppops.net [127.0.0.1]) by mx0a-002c1b01.pphosted.com (8.16.1.2/8.16.1.2) with ESMTP id 238EMqEo009873 for ; Fri, 8 Apr 2022 10:49:16 -0700 Received: from nam11-bn8-obe.outbound.protection.outlook.com (mail-bn8nam11lp2170.outbound.protection.outlook.com [104.47.58.170]) by mx0a-002c1b01.pphosted.com (PPS) with ESMTPS id 3f6p1yp13w-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 08 Apr 2022 10:49:16 -0700 Received: from SJ0PR02MB8564.namprd02.prod.outlook.com (2603:10b6:a03:3f6::16) by BY5PR02MB6533.namprd02.prod.outlook.com (2603:10b6:a03:1d5::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5144.26; Fri, 8 Apr 2022 17:49:12 +0000 Received: from SJ0PR02MB8564.namprd02.prod.outlook.com ([fe80::b167:3939:c2e0:64e8]) by SJ0PR02MB8564.namprd02.prod.outlook.com ([fe80::b167:3939:c2e0:64e8%6]) with mapi id 15.20.5144.023; Fri, 8 Apr 2022 17:49:12 +0000 X-MC-Unique: BZkjoM_sNQO3wMuboo3s5w-1 X-Original-To: libvir-list@listman.corp.redhat.com X-MC-Unique: XwXGkO8TP2ufbagblXr7YA-1 From: Rohit Kumar To: libvir-list@redhat.com Subject: [PATCH v2 1/8] Make NVRAM a virStorageSource type. Date: Fri, 8 Apr 2022 10:48:44 -0700 Message-Id: <20220408174851.1077477-2-rohit.kumar3@nutanix.com> In-Reply-To: <20220408174851.1077477-1-rohit.kumar3@nutanix.com> References: <20220408174851.1077477-1-rohit.kumar3@nutanix.com> X-ClientProxiedBy: SJ0PR03CA0363.namprd03.prod.outlook.com (2603:10b6:a03:3a1::8) To SJ0PR02MB8564.namprd02.prod.outlook.com (2603:10b6:a03:3f6::16) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 11a6f9b9-c6c7-4133-abe6-08da1988176a X-MS-TrafficTypeDiagnostic: BY5PR02MB6533:EE_ X-Microsoft-Antispam-PRVS: x-proofpoint-crosstenant: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0 X-Microsoft-Antispam-Message-Info: yN1vuxWWQWxIJZv/WktB6TfkMh99hmFeKdO6LTuUkMZ2VtK4OC2LJjoal/igPuZKPc7NHJqzb4lM2Bd5TPJgQ+9+G0id55IlubiH+wvZj/WXCp2iDXJnx+YtfLUx4mRBwdJ48Bkbxvhhor5Ne++Pq6lNtdha669KyPVe0/vfZRxmAGWOKMhFZ+O8wrLgA+FG4j4RZUG/HcnSceHYaA3xaPU+kHI2xVZHi6XVGzWrYY6dkZiW3EUNDQ02P1NNgyrTtG23xQwNfHRhMY5SR3avMSHfv+MCAcDHcGJMIbFNVZ2d3XmIYanwGPI+CWPZybqpGN6oXYxSzRXYbE2jR6U33bdI6nQgnKLe5XmgtgsVLbQs7kiy70msDWoJsg2NrtdxUbTQH7AkxWNgdcig2pQrdMszp+nJt+9cyncDcCxYeJzshgtF1p2qjQFhHW++qcRnow3H/mbnkMGuwE7M8jqAcc+6olTzPQE5gRdvn4SkFPAs7bFE9IL/o4DnSfG9AMZNgzK41y88cHW22arcvYdYzP/NzQK2v+MuSd1lr995kT8B8zyqyKlvaRnrYTucyYGBBFCKr1u9qhFvhS2KWHZ1hrXsgPWdv34N+ZdiGR9QTU1c7CwFWydgWsSQk7PoXkxeckQLXO5/iBZ21GJsAD/Q7R2xnkt7q9CQazOV0Vj18MPZ6SY6ODybds3YkYOwGGLtoTfeAKR5RLgS6csaW2xJxA== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SJ0PR02MB8564.namprd02.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230001)(366004)(6666004)(38350700002)(38100700002)(6486002)(83380400001)(30864003)(8936002)(508600001)(2906002)(86362001)(5660300002)(66476007)(36756003)(66556008)(2616005)(107886003)(8676002)(4326008)(66946007)(6512007)(6916009)(54906003)(26005)(186003)(52116002)(6506007)(1076003)(316002); DIR:OUT; SFP:1102 X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?36Z73vIvysZfkxPbnkWB2eF0kK22/kSraI0OhjXMVIYYNmYXdqGUgpNDj4Lo?= =?us-ascii?Q?GbMK8w4kQPezPU+5ZxT1v4tp5zhk0Na0L/sYcd5T5ZMRo4RFWbjsM3qF8FMd?= =?us-ascii?Q?Jn0flvLiLCtKfm6PK7lZo6R4pirf/GlgxTEPc7ErqF1891oIV3WCME86xGe1?= =?us-ascii?Q?6xf13bGmDOnckH4KtT2Hvxfm8vI37hJ4MfnKJHN24mXdypyZpD7yFVBFpNYp?= =?us-ascii?Q?0BrHAI6x4OnxZjOI/xTiOrFM/2LrmZTIoWR1PE0hGMJ0z1bCtqYooKvGZtHr?= =?us-ascii?Q?g5lXvw8Op6oo4Myl+tLKeMUVusDrldZaI91G47A/JUfXDOrjCBkN+02mMHRD?= =?us-ascii?Q?2sLk6oVg3Ex/+ohGO5UwVpMDiJsXXmW3Dh9X/OXS3K7UcLzCzyil/9lIXngc?= =?us-ascii?Q?HtZkDX8slhCkhIpC1uLs5FLs4ty2qNdIlFnFN9UYmhxRuJUfOaGpqCtd4tiR?= =?us-ascii?Q?g1zxf7ToX5c7WVFDqvKdlxGJAgujaA/zL5OD4WCIjjY2NAPLAJqpyHWiwgda?= =?us-ascii?Q?impGweBfi/TUNlXRJTNPGmphN6k6YyS+jCUXsWUvmh2PlAEjqgUTV0Png8fD?= =?us-ascii?Q?i6bNp6lAHC4PsieKl0v6cxCU4+ffzfAsfRWFF2xW3XZwh9kyGj/0Sy57Vg73?= =?us-ascii?Q?TYe+bjwjl241I4TgITAfs8KGd28OKGJFd+5H1/GL2Aj00LguRVbPseCKGgkI?= =?us-ascii?Q?Q4cyFJNOXJ16roqK9j16pJsOr9+hogxJtDcTmJ5gi61sTigxBBopbqFy8LmZ?= =?us-ascii?Q?hI+QIHPbX5F3QBbiPOw7xnCQycvZRZlJRnQbsS5zuKlFXSb2jsYYR/PrwT6b?= =?us-ascii?Q?xpNV0PYB/sU2MNFG6foDUDFlvYHhnWMAvPrRtfeTpejoD5bzdseD5Nmyy7ZH?= =?us-ascii?Q?1BemMu9O9g5/Uf1lJXQZOyYkLRBbiRhumg5XiC6xUg9q646mSf3TdpkbYKKL?= =?us-ascii?Q?Wn+wo6R3mEEJ60e/D2defNzqmKL6vVu0mE2344mB/vbG46sGKH6rWfAd6YE1?= =?us-ascii?Q?kuUyxjtzpxnJlqMf8U+lTIAbXlc6bTJrkXU5Yhau/04773mAxp+Ooqu5c510?= =?us-ascii?Q?JSVlOIGz1zSMZam9CQjKCbjj0gcrQdnDDyX6m/MN5hJsIpJkMCyGXlWEDd/S?= =?us-ascii?Q?lTR+PYsmSEXh5NP7zkzWXFeQ2ij8dohzdSBCxfA93HwkjS2zLpd+m7/WwYpq?= =?us-ascii?Q?ruUe6HACX9P+pCNwxq+OngNZxki6Ku3bNH5gtQdtP0y1jjPHEuJwLoTTRnwF?= =?us-ascii?Q?qd722Ymf69m5xRH4zLaEgRCmVxSMmg3yxs0qtYgH/ZPPbmWVxFgitTyZqE5x?= =?us-ascii?Q?reZGzHW/oSGNxOsH2FFlvRqjxtrQOHk25kveKzf1WauDskf6NfZAdyDkZRVf?= =?us-ascii?Q?BBdA1DbT+/uXtx8LfcZS12IgEGraMrCTFUPYuc0CwxqahMD9rZmHTzyJjsci?= =?us-ascii?Q?45eukERI0ZVjjMyUhabYmlRq3b0dpNSN6O6ZXej1oZCLdadv0AnJqXrqCl+L?= =?us-ascii?Q?qRN98S8zjR1GEkWer2hw0+E9bLX1dUerQ10nJCM6cFNVoMUVG5WbrkVmUSjG?= =?us-ascii?Q?7tXjUvECBkf36HkYMZNA2qgr3xYhCPsIAsGrfSvwjmE4IoHLp4eiVPiXtbOc?= =?us-ascii?Q?7+uNw+Ru26jV5W0nD948bTU0eFaB4Qlg5YXw+afYk9t2s9IaZbDdazegVj37?= =?us-ascii?Q?bQxkqBfZl5IIvJemhF2Ycb0I59gfHtaReM0dBTiYtF7a4pElNgPFmQMVtXhf?= =?us-ascii?Q?byyckXdlw4XEwBKHLzoqHqhWRd3Gzbo=3D?= X-OriginatorOrg: nutanix.com X-MS-Exchange-CrossTenant-Network-Message-Id: 11a6f9b9-c6c7-4133-abe6-08da1988176a X-MS-Exchange-CrossTenant-AuthSource: SJ0PR02MB8564.namprd02.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 08 Apr 2022 17:49:12.7178 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bb047546-786f-4de1-bd75-24e5b6f79043 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 4GeAki8ZXtEEEV4El0lof2hJLaPwq1fs+l6PZtX9UYWMP5/wYfy+vW/lSOxrCVSspk1jvG/9bsm4/FRm0eeNm3ZsuhbvI+4uIx67hNSrhOg= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY5PR02MB6533 X-Proofpoint-ORIG-GUID: q--lzl2La4eQOmBuzhlWsKPRtQyvPA34 X-Proofpoint-GUID: q--lzl2La4eQOmBuzhlWsKPRtQyvPA34 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.205,Aquarius:18.0.858,Hydra:6.0.425,FMLib:17.11.64.514 definitions=2022-04-08_05,2022-04-08_01,2022-02-23_01 X-Proofpoint-Spam-Reason: safe 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.85 on 10.11.54.9 X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: prachatos.mitra@nutanix.com, Rohit Kumar , Florian Schmidt , prerna.saxena@nutanix.com Errors-To: libvir-list-bounces@redhat.com Sender: "libvir-list" X-Scanned-By: MIMEDefang 2.85 on 10.11.54.10 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 X-ZM-MESSAGEID: 1649440179898100001 Content-Type: text/plain; charset="utf-8" Currently, libvirt allows only local filepaths to specify a NVRAM disk. Since, VMs can migrate across hosts, so making it to virStorageSource type would help in uninturrupted access NVRAM disks over network. Signed-off-by: Prerna Saxena Signed-off-by: Florian Schmidt Signed-off-by: Rohit Kumar --- src/conf/domain_conf.c | 13 ++++++++++--- src/conf/domain_conf.h | 2 +- src/qemu/qemu_cgroup.c | 3 ++- src/qemu/qemu_command.c | 2 +- src/qemu/qemu_domain.c | 14 ++++++++------ src/qemu/qemu_driver.c | 5 +++-- src/qemu/qemu_firmware.c | 17 ++++++++++++----- src/qemu/qemu_namespace.c | 5 +++-- src/qemu/qemu_process.c | 5 +++-- src/security/security_dac.c | 6 ++++-- src/security/security_selinux.c | 6 ++++-- src/security/virt-aa-helper.c | 5 +++-- src/vbox/vbox_common.c | 2 +- 13 files changed, 55 insertions(+), 30 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 5dd269b283..b83c2f0e6a 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -3540,7 +3540,7 @@ virDomainLoaderDefFree(virDomainLoaderDef *loader) return; =20 g_free(loader->path); - g_free(loader->nvram); + virObjectUnref(loader->nvram); g_free(loader->nvramTemplate); g_free(loader); } @@ -18266,7 +18266,11 @@ virDomainDefParseBootLoaderOptions(virDomainDef *d= ef, fwAutoSelect) < 0) return -1; =20 - def->os.loader->nvram =3D virXPathString("string(./os/nvram[1])", ctxt= ); + if (virXPathNode("./os/nvram[1]", ctxt)) { + def->os.loader->nvram =3D g_new0(virStorageSource, 1); + def->os.loader->nvram->path =3D virXPathString("string(./os/nvram[= 1])", ctxt); + def->os.loader->nvram->type =3D VIR_STORAGE_TYPE_FILE; + } if (!fwAutoSelect) def->os.loader->nvramTemplate =3D virXPathString("string(./os/nvra= m[1]/@template)", ctxt); =20 @@ -26971,7 +26975,10 @@ virDomainLoaderDefFormat(virBuffer *buf, virXMLFormatElementInternal(buf, "loader", &loaderAttrBuf, &loaderChil= dBuf, false, false); =20 virBufferEscapeString(&nvramAttrBuf, " template=3D'%s'", loader->nvram= Template); - virBufferEscapeString(&nvramChildBuf, "%s", loader->nvram); + if (loader->nvram) { + if (loader->nvram->type =3D=3D VIR_STORAGE_TYPE_FILE) + virBufferEscapeString(&nvramChildBuf, "%s", loader->nvram->pat= h); + } virXMLFormatElementInternal(buf, "nvram", &nvramAttrBuf, &nvramChildBu= f, false, false); } =20 diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 694491cd63..eecee1075c 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -2234,7 +2234,7 @@ struct _virDomainLoaderDef { virTristateBool readonly; virDomainLoader type; virTristateBool secure; - char *nvram; /* path to non-volatile RAM */ + virStorageSource *nvram; char *nvramTemplate; /* user override of path to master nvram */ }; =20 diff --git a/src/qemu/qemu_cgroup.c b/src/qemu/qemu_cgroup.c index aa0c927578..d46c9ff36a 100644 --- a/src/qemu/qemu_cgroup.c +++ b/src/qemu/qemu_cgroup.c @@ -581,7 +581,8 @@ qemuSetupFirmwareCgroup(virDomainObj *vm) return -1; =20 if (vm->def->os.loader->nvram && - qemuSetupImagePathCgroup(vm, vm->def->os.loader->nvram, false) < 0) + vm->def->os.loader->nvram->type =3D=3D VIR_STORAGE_TYPE_FILE && + qemuSetupImagePathCgroup(vm, vm->def->os.loader->nvram->path, fals= e) < 0) return -1; =20 return 0; diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index bb45954108..1393d4fc22 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -9648,7 +9648,7 @@ qemuBuildDomainLoaderPflashCommandLine(virCommand *cm= d, =20 if (loader->nvram) { virBufferAddLit(&buf, "file=3D"); - virQEMUBuildBufferEscapeComma(&buf, loader->nvram); + virQEMUBuildBufferEscapeComma(&buf, loader->nvram->path); virBufferAsprintf(&buf, ",if=3Dpflash,format=3Draw,unit=3D%d", uni= t); =20 virCommandAddArg(cmd, "-drive"); diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index a4334de158..70e96cc5a5 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -4663,8 +4663,12 @@ qemuDomainDefPostParse(virDomainDef *def, } =20 if (virDomainDefHasOldStyleROUEFI(def) && - !def->os.loader->nvram) - qemuDomainNVRAMPathFormat(cfg, def, &def->os.loader->nvram); + (!def->os.loader->nvram || !def->os.loader->nvram->path)) { + if (!def->os.loader->nvram) + def->os.loader->nvram =3D g_new0(virStorageSource, 1); + def->os.loader->nvram->type =3D VIR_STORAGE_TYPE_FILE; + qemuDomainNVRAMPathFormat(cfg, def, &def->os.loader->nvram->path); + } =20 if (qemuDomainDefAddDefaultDevices(driver, def, qemuCaps) < 0) return -1; @@ -11349,11 +11353,9 @@ qemuDomainInitializePflashStorageSource(virDomainO= bj *vm) =20 =20 if (def->os.loader->nvram) { - pflash1 =3D virStorageSourceNew(); - pflash1->type =3D VIR_STORAGE_TYPE_FILE; + if (!(pflash1 =3D virStorageSourceCopy(def->os.loader->nvram, fals= e))) + return -1; pflash1->format =3D VIR_STORAGE_FILE_RAW; - pflash1->path =3D g_strdup(def->os.loader->nvram); - pflash1->readonly =3D false; pflash1->nodeformat =3D g_strdup("libvirt-pflash1-format"); pflash1->nodestorage =3D g_strdup("libvirt-pflash1-storage"); } diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 8c0e36e9b2..2b2bd8d20c 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -6615,8 +6615,9 @@ qemuDomainUndefineFlags(virDomainPtr dom, } } =20 - if (vm->def->os.loader && vm->def->os.loader->nvram) { - nvram_path =3D g_strdup(vm->def->os.loader->nvram); + if (vm->def->os.loader && vm->def->os.loader->nvram && + vm->def->os.loader->nvram->type =3D=3D VIR_STORAGE_TYPE_FILE) { + nvram_path =3D g_strdup(vm->def->os.loader->nvram->path); } else if (vm->def->os.firmware =3D=3D VIR_DOMAIN_OS_DEF_FIRMWARE_EFI)= { qemuDomainNVRAMPathFormat(cfg, vm->def, &nvram_path); } diff --git a/src/qemu/qemu_firmware.c b/src/qemu/qemu_firmware.c index 51223faadf..6556a613a8 100644 --- a/src/qemu/qemu_firmware.c +++ b/src/qemu/qemu_firmware.c @@ -1192,13 +1192,16 @@ qemuFirmwareEnableFeatures(virQEMUDriver *driver, VIR_FREE(def->os.loader->nvramTemplate); def->os.loader->nvramTemplate =3D g_strdup(flash->nvram_template.f= ilename); =20 - if (!def->os.loader->nvram) - qemuDomainNVRAMPathFormat(cfg, def, &def->os.loader->nvram); + if (!def->os.loader->nvram) { + def->os.loader->nvram =3D g_new0(virStorageSource, 1); + def->os.loader->nvram->type =3D VIR_STORAGE_TYPE_FILE; + qemuDomainNVRAMPathFormat(cfg, def, &def->os.loader->nvram->pa= th); + } =20 VIR_DEBUG("decided on firmware '%s' template '%s' NVRAM '%s'", def->os.loader->path, def->os.loader->nvramTemplate, - def->os.loader->nvram); + def->os.loader->nvram->path); break; =20 case QEMU_FIRMWARE_DEVICE_KERNEL: @@ -1364,8 +1367,12 @@ qemuFirmwareFillDomain(virQEMUDriver *driver, * its path in domain XML) but no template for NVRAM was * specified and the varstore doesn't exist ... */ if (!virDomainDefHasOldStyleROUEFI(def) || - def->os.loader->nvramTemplate || - (!reset_nvram && virFileExists(def->os.loader->nvram))) + def->os.loader->nvramTemplate) + return 0; + + if (!reset_nvram && def->os.loader->nvram && + def->os.loader->nvram->type =3D=3D VIR_STORAGE_TYPE_FILE + && virFileExists(def->os.loader->nvram->path)) return 0; =20 /* ... then we want to consult JSON FW descriptors first, diff --git a/src/qemu/qemu_namespace.c b/src/qemu/qemu_namespace.c index 23681b14a4..18a24635ad 100644 --- a/src/qemu/qemu_namespace.c +++ b/src/qemu/qemu_namespace.c @@ -572,8 +572,9 @@ qemuDomainSetupLoader(virDomainObj *vm, case VIR_DOMAIN_LOADER_TYPE_PFLASH: *paths =3D g_slist_prepend(*paths, g_strdup(loader->path)); =20 - if (loader->nvram) - *paths =3D g_slist_prepend(*paths, g_strdup(loader->nvram)= ); + if (loader->nvram && + loader->nvram->type =3D=3D VIR_STORAGE_TYPE_FILE) + *paths =3D g_slist_prepend(*paths, g_strdup(loader->nvram-= >path)); break; =20 case VIR_DOMAIN_LOADER_TYPE_NONE: diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 2e11d24be2..e53a26c6fd 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4472,7 +4472,8 @@ qemuPrepareNVRAM(virQEMUDriver *driver, struct qemuPrepareNVRAMHelperData data; =20 if (!loader || !loader->nvram || - (virFileExists(loader->nvram) && !reset_nvram)) + loader->nvram->type !=3D VIR_STORAGE_TYPE_FILE || + (virFileExists(loader->nvram->path) && !reset_nvram)) return 0; =20 master_nvram_path =3D loader->nvramTemplate; @@ -4504,7 +4505,7 @@ qemuPrepareNVRAM(virQEMUDriver *driver, data.srcFD =3D srcFD; data.srcPath =3D master_nvram_path; =20 - if (virFileRewrite(loader->nvram, + if (virFileRewrite(loader->nvram->path, S_IRUSR | S_IWUSR, cfg->user, cfg->group, qemuPrepareNVRAMHelper, diff --git a/src/security/security_dac.c b/src/security/security_dac.c index e9e316551e..66c36c57a3 100644 --- a/src/security/security_dac.c +++ b/src/security/security_dac.c @@ -1971,7 +1971,8 @@ virSecurityDACRestoreAllLabel(virSecurityManager *mgr, } =20 if (def->os.loader && def->os.loader->nvram && - virSecurityDACRestoreFileLabel(mgr, def->os.loader->nvram) < 0) + def->os.loader->nvram->type =3D=3D VIR_STORAGE_TYPE_FILE && + virSecurityDACRestoreFileLabel(mgr, def->os.loader->nvram->path) <= 0) rc =3D -1; =20 if (def->os.kernel && @@ -2182,8 +2183,9 @@ virSecurityDACSetAllLabel(virSecurityManager *mgr, } =20 if (def->os.loader && def->os.loader->nvram && + def->os.loader->nvram->type =3D=3D VIR_STORAGE_TYPE_FILE && virSecurityDACSetOwnership(mgr, NULL, - def->os.loader->nvram, + def->os.loader->nvram->path, user, group, true) < 0) return -1; =20 diff --git a/src/security/security_selinux.c b/src/security/security_selinu= x.c index 6f02baf2ce..1b6b67e8c7 100644 --- a/src/security/security_selinux.c +++ b/src/security/security_selinux.c @@ -2806,7 +2806,8 @@ virSecuritySELinuxRestoreAllLabel(virSecurityManager = *mgr, } =20 if (def->os.loader && def->os.loader->nvram && - virSecuritySELinuxRestoreFileLabel(mgr, def->os.loader->nvram, tru= e) < 0) + def->os.loader->nvram->type =3D=3D VIR_STORAGE_TYPE_FILE && + virSecuritySELinuxRestoreFileLabel(mgr, def->os.loader->nvram->pat= h, true) < 0) rc =3D -1; =20 if (def->os.kernel && @@ -3212,8 +3213,9 @@ virSecuritySELinuxSetAllLabel(virSecurityManager *mgr, /* This is different than kernel or initrd. The nvram store * is really a disk, qemu can read and write to it. */ if (def->os.loader && def->os.loader->nvram && + def->os.loader->nvram->type =3D=3D VIR_STORAGE_TYPE_FILE && secdef && secdef->imagelabel && - virSecuritySELinuxSetFilecon(mgr, def->os.loader->nvram, + virSecuritySELinuxSetFilecon(mgr, def->os.loader->nvram->path, secdef->imagelabel, true) < 0) return -1; =20 diff --git a/src/security/virt-aa-helper.c b/src/security/virt-aa-helper.c index 1f1cce8b3d..d4eb8b08c9 100644 --- a/src/security/virt-aa-helper.c +++ b/src/security/virt-aa-helper.c @@ -1006,8 +1006,9 @@ get_files(vahControl * ctl) if (vah_add_file(&buf, ctl->def->os.loader->path, "rk") !=3D 0) goto cleanup; =20 - if (ctl->def->os.loader && ctl->def->os.loader->nvram) - if (vah_add_file(&buf, ctl->def->os.loader->nvram, "rwk") !=3D 0) + if (ctl->def->os.loader && ctl->def->os.loader->nvram && + ctl->def->os.loader->nvram->type =3D VIR_STORAGE_TYPE_FILE) + if (vah_add_file(&buf, ctl->def->os.loader->nvram->path, "rwk") != =3D 0) goto cleanup; =20 for (i =3D 0; i < ctl->def->ngraphics; i++) { diff --git a/src/vbox/vbox_common.c b/src/vbox/vbox_common.c index 34e555644c..214d5e84b8 100644 --- a/src/vbox/vbox_common.c +++ b/src/vbox/vbox_common.c @@ -992,7 +992,7 @@ vboxSetBootDeviceOrder(virDomainDef *def, struct _vboxD= river *data, VIR_DEBUG("def->os.loader->path %s", def->os.loader->path); VIR_DEBUG("def->os.loader->readonly %d", def->os.loader->readonly); VIR_DEBUG("def->os.loader->type %d", def->os.loader->type); - VIR_DEBUG("def->os.loader->nvram %s", def->os.loader->nvram); + VIR_DEBUG("def->os.loader->nvram->path %s", def->os.loader->nvram-= >path); } VIR_DEBUG("def->os.bootloader %s", def->os.bootloader); VIR_DEBUG("def->os.bootloaderArgs %s", def->os.bootloaderArgs); --=20 2.25.1