Re: [PATCH] qemu: forbid updating any attributes of an interface <backend> with update-device

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Ping

On 2/15/23 4:06 PM, Laine Stump wrote:
Changing any of the attributes of an <interface>'s <backend> would
require removing and re-adding the interface for the new setting to
take effect, so fail any update-device that changes anything in
<backend>

Resolves: https://bugzilla.redhat.com/2169245
Signed-off-by: Laine Stump <laine@xxxxxxxxxx>
---
  src/conf/domain_conf.c   | 14 ++++++++++++++
  src/conf/domain_conf.h   |  2 ++
  src/libvirt_private.syms |  1 +
  src/qemu/qemu_hotplug.c  |  9 +++++++++
  4 files changed, 26 insertions(+)

diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 3dfc5c87af..aa7bed7dc3 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -19853,6 +19853,20 @@ virDomainFsDefCheckABIStability(virDomainFSDef *src,
  }
+bool
+virDomainNetBackendIsEqual(virDomainNetBackend *src,
+                           virDomainNetBackend *dst)
+{
+    if (src->type != dst->type ||
+        STRNEQ_NULLABLE(src->tap, dst->tap) ||
+        STRNEQ_NULLABLE(src->vhost, dst->vhost) ||
+        STRNEQ_NULLABLE(src->logFile, dst->logFile)) {
+        return false;
+    }
+    return true;
+}
+
+
  static bool
  virDomainNetDefCheckABIStability(virDomainNetDef *src,
                                   virDomainNetDef *dst)
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 7d58efb011..bd8ce562d9 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -3862,6 +3862,8 @@ virDomainNetDef *virDomainNetFindByName(virDomainDef *def, const char *ifname);
  bool virDomainHasNet(virDomainDef *def, virDomainNetDef *net);
  int virDomainNetInsert(virDomainDef *def, virDomainNetDef *net);
  int virDomainNetUpdate(virDomainDef *def, size_t netidx, virDomainNetDef *newnet);
+bool virDomainNetBackendIsEqual(virDomainNetBackend *src,
+                                virDomainNetBackend *dst);
  int virDomainNetDHCPInterfaces(virDomainDef *def, virDomainInterfacePtr **ifaces);
  int virDomainNetARPInterfaces(virDomainDef *def, virDomainInterfacePtr **ifaces);
  virDomainNetDef *virDomainNetRemove(virDomainDef *def, size_t i);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 97c3d86217..c6c47dbfac 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -528,6 +528,7 @@ virDomainMouseModeTypeToString;
  virDomainNetAllocateActualDevice;
  virDomainNetAppendIPAddress;
  virDomainNetARPInterfaces;
+virDomainNetBackendIsEqual;
  virDomainNetBandwidthUpdate;
  virDomainNetDefActualFromNetworkPort;
  virDomainNetDefActualToNetworkPort;
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index c490e2b97a..b4cddef9f5 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -3675,6 +3675,15 @@ qemuDomainChangeNet(virQEMUDriver *driver,
          goto cleanup;
      }
+ /* nothing in <backend> can be modified in an existing interface -
+     * the entire device will need to be removed and re-added.
+     */
+    if (!virDomainNetBackendIsEqual(&olddev->backend, &newdev->backend)) {
+        virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
+                       _("cannot modify network device backend settings"));
+        goto cleanup;
+    }
+
      /* allocate new actual device to compare to old - we will need to
       * free it if we fail for any reason
       */




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux