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
This commit is contained in:
Peter Krempa 2015-06-26 17:14:33 +02:00
parent 1a13677460
commit 91081979dd

View File

@ -1749,6 +1749,7 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver,
{ {
qemuDomainObjPrivatePtr priv = vm->privateData; qemuDomainObjPrivatePtr priv = vm->privateData;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
unsigned long long oldmem = virDomainDefGetMemoryActual(vm->def);
char *devstr = NULL; char *devstr = NULL;
char *objalias = NULL; char *objalias = NULL;
const char *backendType; const char *backendType;
@ -1815,6 +1816,9 @@ qemuDomainAttachMemory(virQEMUDriverPtr driver,
if (fix_balloon) if (fix_balloon)
vm->def->mem.cur_balloon += mem->size; vm->def->mem.cur_balloon += mem->size;
virDomainAuditMemory(vm, oldmem, virDomainDefGetMemoryActual(vm->def),
"update", ret == 0);
/* mem is consumed by vm->def */ /* mem is consumed by vm->def */
mem = NULL; mem = NULL;
@ -2904,10 +2908,12 @@ qemuDomainRemoveMemoryDevice(virQEMUDriverPtr driver,
virDomainMemoryDefPtr mem) virDomainMemoryDefPtr mem)
{ {
qemuDomainObjPrivatePtr priv = vm->privateData; qemuDomainObjPrivatePtr priv = vm->privateData;
unsigned long long oldmem = virDomainDefGetMemoryActual(vm->def);
virObjectEventPtr event; virObjectEventPtr event;
char *backendAlias = NULL; char *backendAlias = NULL;
int rc; int rc;
int idx; int idx;
int ret = -1;
VIR_DEBUG("Removing memory device %s from domain %p %s", VIR_DEBUG("Removing memory device %s from domain %p %s",
mem->info.alias, vm, vm->def->name); mem->info.alias, vm, vm->def->name);
@ -2916,12 +2922,12 @@ qemuDomainRemoveMemoryDevice(virQEMUDriverPtr driver,
qemuDomainEventQueue(driver, event); qemuDomainEventQueue(driver, event);
if (virAsprintf(&backendAlias, "mem%s", mem->info.alias) < 0) if (virAsprintf(&backendAlias, "mem%s", mem->info.alias) < 0)
goto error; goto cleanup;
qemuDomainObjEnterMonitor(driver, vm); qemuDomainObjEnterMonitor(driver, vm);
rc = qemuMonitorDelObject(priv->mon, backendAlias); rc = qemuMonitorDelObject(priv->mon, backendAlias);
if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0) if (qemuDomainObjExitMonitor(driver, vm) < 0 || rc < 0)
goto error; goto cleanup;
vm->def->mem.cur_balloon -= mem->size; vm->def->mem.cur_balloon -= mem->size;
@ -2929,12 +2935,14 @@ qemuDomainRemoveMemoryDevice(virQEMUDriverPtr driver,
virDomainMemoryRemove(vm->def, idx); virDomainMemoryRemove(vm->def, idx);
virDomainMemoryDefFree(mem); virDomainMemoryDefFree(mem);
VIR_FREE(backendAlias); ret = 0;
return 0;
cleanup:
virDomainAuditMemory(vm, oldmem, virDomainDefGetMemoryActual(vm->def),
"update", ret == 0);
error:
VIR_FREE(backendAlias); VIR_FREE(backendAlias);
return -1; return ret;
} }