From: Peter Krempa Date: Fri, 13 Mar 2020 08:05:48 +0000 (+0100) Subject: qemuDomainGetGuestInfo: Validate supported information types X-Git-Tag: v6.2.0-rc1~49 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=60527cbbc25bcf771c8034d1f3f46e6071ed6c2c;p=thirdparty%2Flibvirt.git qemuDomainGetGuestInfo: Validate supported information types 'qemuDomainGetGuestInfoCheckSupport' despite its name was not checking whether the info types are supported. Convert the function to return integers and include the check. Signed-off-by: Peter Krempa Reviewed-by: Ján Tomko --- diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 209f8279bd..fcd7bb2faf 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -22853,20 +22853,32 @@ qemuDomainGetLaunchSecurityInfo(virDomainPtr domain, return ret; } -static const unsigned int supportedGuestInfoTypes = +static const unsigned int qemuDomainGetGuestInfoSupportedTypes = VIR_DOMAIN_GUEST_INFO_USERS | VIR_DOMAIN_GUEST_INFO_OS | VIR_DOMAIN_GUEST_INFO_TIMEZONE | VIR_DOMAIN_GUEST_INFO_HOSTNAME | VIR_DOMAIN_GUEST_INFO_FILESYSTEM; -static void -qemuDomainGetGuestInfoCheckSupport(unsigned int *types) +static int +qemuDomainGetGuestInfoCheckSupport(unsigned int types, + unsigned int *supportedTypes) { - if (*types == 0) - *types = supportedGuestInfoTypes; + if (types == 0) { + *supportedTypes = qemuDomainGetGuestInfoSupportedTypes; + return 0; + } + + *supportedTypes = types & qemuDomainGetGuestInfoSupportedTypes; + + if (types != *supportedTypes) { + virReportError(VIR_ERR_INVALID_ARG, + _("unsupported guest information types '0x%x'"), + types & ~qemuDomainGetGuestInfoSupportedTypes); + return -1; + } - *types = *types & supportedGuestInfoTypes; + return 0; } static void @@ -22972,14 +22984,16 @@ qemuDomainGetGuestInfo(virDomainPtr dom, int ret = -1; int maxparams = 0; g_autofree char *hostname = NULL; - unsigned int supportedTypes = types; + unsigned int supportedTypes; int rc; size_t nfs = 0; qemuAgentFSInfoPtr *agentfsinfo = NULL; size_t i; virCheckFlags(0, -1); - qemuDomainGetGuestInfoCheckSupport(&supportedTypes); + + if (qemuDomainGetGuestInfoCheckSupport(types, &supportedTypes) < 0) + return -1; if (!(vm = qemuDomainObjFromDomain(dom))) goto cleanup;