From d174394105cf00ed266bf729ddf461c21637c736 Mon Sep 17 00:00:00 2001 From: Luyao Huang Date: Tue, 24 Mar 2015 22:12:37 +0800 Subject: [PATCH] qemu: Fix issues with maxMemory in qemuDomainSetMemoryFlags() qemuDomainSetMemoryFlags() would allow to set the initial memory greater than the field. While the configuration would not work as memory hotplug requires NUMA to be enabled and the qemuDomainSetMemoryFlags() API does not work on NUMA guests this just fixes a corner case. The fix is still worth though as it allows to induce an invalid configuration and make the VM vanish on libvirt restart. Additionally this tweaks error message to be more accurate. Signed-off-by: Luyao Huang Signed-off-by: Peter Krempa --- src/qemu/qemu_driver.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 6fc9696dd9..d174aab483 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -2313,11 +2313,19 @@ static int qemuDomainSetMemoryFlags(virDomainPtr dom, unsigned long newmem, * is no way to change the individual node sizes with this API */ if (virDomainNumaGetNodeCount(persistentDef->numa) > 0) { virReportError(VIR_ERR_OPERATION_INVALID, "%s", - _("maximum memory size of a domain with NUMA " + _("initial memory size of a domain with NUMA " "nodes cannot be modified with this API")); goto endjob; } + if (persistentDef->mem.max_memory && + persistentDef->mem.max_memory < newmem) { + virReportError(VIR_ERR_OPERATION_INVALID, "%s", + _("cannot set initial memory size greater than " + "the maximum memory size")); + goto endjob; + } + virDomainDefSetMemoryInitial(persistentDef, newmem); if (persistentDef->mem.cur_balloon > newmem) -- 2.39.5