]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
drivers: Reject unsupported firmware formats
authorAndrea Bolognani <abologna@redhat.com>
Tue, 7 Feb 2023 18:12:44 +0000 (19:12 +0100)
committerAndrea Bolognani <abologna@redhat.com>
Fri, 3 Mar 2023 12:51:04 +0000 (13:51 +0100)
This ensures that, as we add support for more formats at the
domain XML level, we don't accidentally cause drivers to
misbehave or users to get confused.

All existing drivers support the raw format, and supporting
additional formats will require explicit opt-in on the
driver's part.

Signed-off-by: Andrea Bolognani <abologna@redhat.com>
Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
src/bhyve/bhyve_firmware.c
src/libxl/libxl_conf.c
src/qemu/qemu_firmware.c

index cb1b94b4d533f1ec3ea697ffb3d10df1689c5ba1..ff131efa41247dfb0eea9b42d541d31136ae04ab 100644 (file)
@@ -80,6 +80,13 @@ bhyveFirmwareFillDomain(bhyveConn *driver,
     if (!def->os.loader)
         def->os.loader = virDomainLoaderDefNew();
 
+    if (def->os.loader->format != VIR_STORAGE_FILE_RAW) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("Unsupported loader format '%s'"),
+                       virStorageFileFormatTypeToString(def->os.loader->format));
+        return -1;
+    }
+
     def->os.loader->type = VIR_DOMAIN_LOADER_TYPE_PFLASH;
     def->os.loader->readonly = VIR_TRISTATE_BOOL_YES;
 
index 97c183ebf341e1e6f7243ac0d313eafc72d4b40e..485015ef63679ff23b2d03bd3c24df1d681fe9be 100644 (file)
@@ -656,6 +656,13 @@ libxlMakeDomBuildInfo(virDomainDef *def,
             b_info->u.hvm.bios = LIBXL_BIOS_TYPE_OVMF;
         }
 
+        if (def->os.loader && def->os.loader->format != VIR_STORAGE_FILE_RAW) {
+            virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                           _("Unsupported loader format '%s'"),
+                           virStorageFileFormatTypeToString(def->os.loader->format));
+            return -1;
+        }
+
         if (def->emulator) {
             if (!virFileExists(def->emulator)) {
                 virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
index 4d34062ebf01501ec0070e6dde98b69840c372e3..be6d8d451905b55facb27b1272e0d5e2f5dcbc83 100644 (file)
@@ -1545,6 +1545,7 @@ qemuFirmwareFillDomain(virQEMUDriver *driver,
 {
     g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
     virDomainLoaderDef *loader = def->os.loader;
+    virStorageSource *nvram = loader ? loader->nvram : NULL;
     bool autoSelection = (def->os.firmware != VIR_DOMAIN_OS_DEF_FIRMWARE_NONE);
     int ret;
 
@@ -1559,6 +1560,21 @@ qemuFirmwareFillDomain(virQEMUDriver *driver,
     if (virDomainDefOSValidate(def, NULL) < 0)
         return -1;
 
+    if (loader &&
+        loader->format != VIR_STORAGE_FILE_RAW) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("Unsupported loader format '%s'"),
+                       virStorageFileFormatTypeToString(loader->format));
+        return -1;
+    }
+    if (nvram &&
+        nvram->format != VIR_STORAGE_FILE_RAW) {
+        virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+                       _("Unsupported nvram format '%s'"),
+                       virStorageFileFormatTypeToString(nvram->format));
+        return -1;
+    }
+
     /* If firmware autoselection is disabled and the loader is a ROM
      * instead of a PFLASH device, then we're using BIOS and we don't
      * need any information at all */