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