From 91081979dd3e33f2e39e3de234e52d0e69ffcccb Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Fri, 26 Jun 2015 17:14:33 +0200 Subject: [PATCH] qemu: Audit memory size with memory hotplug operations The memory device hot(un)plug was missing calls to the auditing code. Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1226234 --- src/qemu/qemu_hotplug.c | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c index 11f983fb29..391190dcdd 100644 --- a/src/qemu/qemu_hotplug.c +++ b/src/qemu/qemu_hotplug.c @@ -1749,6 +1749,7 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, { qemuDomainObjPrivatePtr priv = vm->privateData; virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); + unsigned long long oldmem = virDomainDefGetMemoryActual(vm->def); char *devstr = NULL; char *objalias = NULL; const char *backendType; @@ -1815,6 +1816,9 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver, if (fix_balloon) vm->def->mem.cur_balloon += mem->size; + virDomainAuditMemory(vm, oldmem, virDomainDefGetMemoryActual(vm->def), + "update", ret == 0); + /* mem is consumed by vm->def */ mem = NULL; @@ -2904,10 +2908,12 @@ qemuDomainRemoveMemoryDevice(virQEMUDriverPtr driver, virDomainMemoryDefPtr mem) { qemuDomainObjPrivatePtr priv = vm->privateData; + unsigned long long oldmem = virDomainDefGetMemoryActual(vm->def); virObjectEventPtr event; char *backendAlias = NULL; int rc; int idx; + int ret = -1; VIR_DEBUG("Removing memory device %s from domain %p %s", mem->info.alias, vm, vm->def->name); @@ -2916,12 +2922,12 @@ qemuDomainRemoveMemoryDevice(virQEMUDriverPtr driver, qemuDomainEventQueue(driver, event); if (virAsprintf(&backendAlias, "mem%s", mem->info.alias) < 0) - goto error; + goto cleanup; qemuDomainObjEnterMonitor(driver, vm); rc = qemuMonitorDelObject(priv->mon, backendAlias); if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) - goto error; + goto cleanup; vm->def->mem.cur_balloon -= mem->size; @@ -2929,12 +2935,14 @@ qemuDomainRemoveMemoryDevice(virQEMUDriverPtr driver, virDomainMemoryRemove(vm->def, idx); virDomainMemoryDefFree(mem); - VIR_FREE(backendAlias); - return 0; + ret = 0; + + cleanup: + virDomainAuditMemory(vm, oldmem, virDomainDefGetMemoryActual(vm->def), + "update", ret == 0); - error: VIR_FREE(backendAlias); - return -1; + return ret; } -- GitLab