From d9977cc0f185d3693bd3197d2b009733a602d39c Mon Sep 17 00:00:00 2001 From: Daniel Henrique Barboza Date: Thu, 18 Feb 2021 09:21:06 -0300 Subject: [PATCH] qemu_driver.c: Coverity fix in qemuNodeDeviceDetachFlags() MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Commit 76f47889326c4 made qemuNodeDeviceDetachFlags() unusable due to an 'if then else if' chain that will always results in a 'return -1', regardless of 'driverName' input. Found by Coverity. Fixes: 76f47889326c45d2732711bc6dd5751aaf6e5194 Reported-by: John Ferlan Reviewed-by: John Ferlan Reviewed-by: Ján Tomko Signed-off-by: Daniel Henrique Barboza --- src/qemu/qemu_driver.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index f1035a536e..b9bbdf8d48 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -11998,7 +11998,6 @@ qemuNodeDeviceDetachFlags(virNodeDevicePtr dev, unsigned int flags) { virQEMUDriverPtr driver = dev->conn->privateData; - bool vfio = qemuHostdevHostSupportsPassthroughVFIO(); virHostdevManagerPtr hostdev_mgr = driver->hostdevMgr; virCheckFlags(0, -1); @@ -12006,22 +12005,27 @@ qemuNodeDeviceDetachFlags(virNodeDevicePtr dev, if (!driverName) driverName = "vfio"; - if (STREQ(driverName, "vfio") && !vfio) { - virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", - _("VFIO device assignment is currently not " - "supported on this system")); - return -1; - } else if (STREQ(driverName, "kvm")) { + /* Only the 'vfio' driver is supported and a special error message for + * the previously supported 'kvm' driver is provided below. */ + if (STRNEQ(driverName, "vfio") && STRNEQ(driverName, "kvm")) { + virReportError(VIR_ERR_INVALID_ARG, + _("unknown driver name '%s'"), driverName); + return -1; + } + + if (STREQ(driverName, "kvm")) { virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", _("KVM device assignment is no longer " "supported on this system")); return -1; - } else { - virReportError(VIR_ERR_INVALID_ARG, - _("unknown driver name '%s'"), driverName); - return -1; } + if (!qemuHostdevHostSupportsPassthroughVFIO()) { + virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED, "%s", + _("VFIO device assignment is currently not " + "supported on this system")); + return -1; + } /* virNodeDeviceDetachFlagsEnsureACL() is being called by * virDomainDriverNodeDeviceDetachFlags() */ -- 2.47.2