982648
From 311a7eaeef6f90ee1ce063b75673dddfbd392346 Mon Sep 17 00:00:00 2001
982648
Message-Id: <311a7eaeef6f90ee1ce063b75673dddfbd392346@dist-git>
982648
From: Michal Privoznik <mprivozn@redhat.com>
982648
Date: Tue, 4 Sep 2018 10:38:48 +0200
982648
Subject: [PATCH] virDomainDefCompatibleDevice: Relax alias change check
982648
MIME-Version: 1.0
982648
Content-Type: text/plain; charset=UTF-8
982648
Content-Transfer-Encoding: 8bit
982648
982648
RHEL-7.6: https://bugzilla.redhat.com/show_bug.cgi?id=1621910
982648
RHEL-8.0: https://bugzilla.redhat.com/show_bug.cgi?id=1603133
982648
982648
When introducing this check back in 4ad54a417a1 my mindset was
982648
that if an element is missing in update XML then user is
982648
requesting for removal of the corresponding setting. For
982648
instance, if <bandwidth/> is not present in update XML any QoS
982648
previously set on <interface/> is cleared out. Well this
982648
assumption is correct but only to some extent.
982648
982648
Turns out, we have some users who when updating path to ISO
982648
image construct very minimalistic disk XML and pass it to device
982648
update API. Such XML is lacking a lot of information, and alias
982648
is one of them. This triggers error in
982648
virDomainDefCompatibleDevice() because we think that user is
982648
requesting to remove the alias. Well, they are not.
982648
982648
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
982648
Reviewed-by: John Ferlan <jferlan@redhat.com>
982648
(cherry picked from commit b48d9e939bcf32a8d6e571313637e2eefe52e117)
982648
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
982648
Reviewed-by: Ján Tomko <jtomko@redhat.com>
982648
---
982648
 src/conf/domain_conf.c | 6 +++---
982648
 1 file changed, 3 insertions(+), 3 deletions(-)
982648
982648
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
982648
index 8a43e607e9..49b0a59918 100644
982648
--- a/src/conf/domain_conf.c
982648
+++ b/src/conf/domain_conf.c
982648
@@ -28378,9 +28378,9 @@ virDomainDefCompatibleDevice(virDomainDefPtr def,
982648
 
982648
     if (action == VIR_DOMAIN_DEVICE_ACTION_UPDATE &&
982648
         live &&
982648
-        ((!!data.newInfo != !!data.oldInfo) ||
982648
-         (data.newInfo && data.oldInfo &&
982648
-          STRNEQ_NULLABLE(data.newInfo->alias, data.oldInfo->alias)))) {
982648
+        (data.newInfo && data.oldInfo &&
982648
+         data.newInfo->alias && data.oldInfo->alias &&
982648
+         STRNEQ(data.newInfo->alias, data.oldInfo->alias))) {
982648
         virReportError(VIR_ERR_OPERATION_DENIED, "%s",
982648
                        _("changing device alias is not allowed"));
982648
         return -1;
982648
-- 
982648
2.18.0
982648