提交 e25f2c74 编写于 作者: E Eric Blake

audit: audit qemu memory and vcpu adjusments

* src/qemu/qemu_audit.h (qemuDomainMemoryAudit)
(qemuDomainVcpuAudit): New prototypes.
* src/qemu/qemu_audit.c (qemuDomainResourceAudit)
(qemuDomainMemoryAudit, qemuDomainVcpuAudit): New functions.
(qemuDomainStartAudit): Call as appropriate.
* src/qemu/qemu_driver.c (qemudDomainSetMemory)
(qemudDomainHotplugVcpus): Likewise.
上级 6bb98d41
...@@ -148,6 +148,59 @@ cleanup: ...@@ -148,6 +148,59 @@ cleanup:
} }
/**
* qemuDomainResourceAudit:
* @vm: domain making an integer resource change
* @resource: name of the resource: "mem" or "vcpu"
* @oldval: the old value of the resource
* @newval: the new value of the resource
* @reason: either "start" or "update"
* @success: true if the resource change succeeded
*
* Log an audit message about an attempted resource change.
*/
static void
qemuDomainResourceAudit(virDomainObjPtr vm,
const char *resource,
unsigned long long oldval,
unsigned long long newval,
const char *reason,
bool success)
{
char uuidstr[VIR_UUID_STRING_BUFLEN];
char *vmname;
virUUIDFormat(vm->def->uuid, uuidstr);
if (!(vmname = virAuditEncode("vm", vm->def->name))) {
VIR_WARN0("OOM while encoding audit message");
return;
}
VIR_AUDIT(VIR_AUDIT_RECORD_RESOURCE, success,
"resrc=%s reason=%s %s uuid=%s old-%s=%lld new-%s=%lld",
resource, reason, vmname, uuidstr,
resource, oldval, resource, newval);
VIR_FREE(vmname);
}
void
qemuDomainMemoryAudit(virDomainObjPtr vm,
unsigned long long oldmem, unsigned long long newmem,
const char *reason, bool success)
{
return qemuDomainResourceAudit(vm, "mem", oldmem, newmem, reason, success);
}
void
qemuDomainVcpuAudit(virDomainObjPtr vm,
unsigned int oldvcpu, unsigned int newvcpu,
const char *reason, bool success)
{
return qemuDomainResourceAudit(vm, "vcpu", oldvcpu, newvcpu, reason,
success);
}
static void qemuDomainLifecycleAudit(virDomainObjPtr vm, static void qemuDomainLifecycleAudit(virDomainObjPtr vm,
const char *op, const char *op,
const char *reason, const char *reason,
...@@ -185,6 +238,9 @@ void qemuDomainStartAudit(virDomainObjPtr vm, const char *reason, bool success) ...@@ -185,6 +238,9 @@ void qemuDomainStartAudit(virDomainObjPtr vm, const char *reason, bool success)
qemuDomainNetAudit(vm, NULL, net, "start", true); qemuDomainNetAudit(vm, NULL, net, "start", true);
} }
qemuDomainMemoryAudit(vm, 0, vm->def->mem.cur_balloon, "start", true);
qemuDomainVcpuAudit(vm, 0, vm->def->vcpus, "start", true);
qemuDomainLifecycleAudit(vm, "start", reason, success); qemuDomainLifecycleAudit(vm, "start", reason, success);
} }
......
...@@ -45,6 +45,16 @@ void qemuDomainCgroupAudit(virDomainObjPtr vm, ...@@ -45,6 +45,16 @@ void qemuDomainCgroupAudit(virDomainObjPtr vm,
const char *item, const char *item,
const char *name, const char *name,
bool success); bool success);
void qemuDomainMemoryAudit(virDomainObjPtr vm,
unsigned long long oldmem,
unsigned long long newmem,
const char *reason,
bool success);
void qemuDomainVcpuAudit(virDomainObjPtr vm,
unsigned int oldvcpu,
unsigned int newvcpu,
const char *reason,
bool success);
void qemuDomainSecurityLabelAudit(virDomainObjPtr vm, bool success); void qemuDomainSecurityLabelAudit(virDomainObjPtr vm, bool success);
#endif /* __QEMU_AUDIT_H__ */ #endif /* __QEMU_AUDIT_H__ */
...@@ -1604,6 +1604,8 @@ static int qemudDomainSetMemory(virDomainPtr dom, unsigned long newmem) { ...@@ -1604,6 +1604,8 @@ static int qemudDomainSetMemory(virDomainPtr dom, unsigned long newmem) {
qemuDomainObjEnterMonitor(vm); qemuDomainObjEnterMonitor(vm);
r = qemuMonitorSetBalloon(priv->mon, newmem); r = qemuMonitorSetBalloon(priv->mon, newmem);
qemuDomainObjExitMonitor(vm); qemuDomainObjExitMonitor(vm);
qemuDomainMemoryAudit(vm, vm->def->mem.cur_balloon, newmem, "update",
r == 1);
if (r < 0) if (r < 0)
goto endjob; goto endjob;
...@@ -2517,8 +2519,9 @@ static void processWatchdogEvent(void *data, void *opaque) ...@@ -2517,8 +2519,9 @@ static void processWatchdogEvent(void *data, void *opaque)
static int qemudDomainHotplugVcpus(virDomainObjPtr vm, unsigned int nvcpus) static int qemudDomainHotplugVcpus(virDomainObjPtr vm, unsigned int nvcpus)
{ {
qemuDomainObjPrivatePtr priv = vm->privateData; qemuDomainObjPrivatePtr priv = vm->privateData;
int i, rc; int i, rc = 1;
int ret = -1; int ret = -1;
int oldvcpus = vm->def->vcpus;
qemuDomainObjEnterMonitor(vm); qemuDomainObjEnterMonitor(vm);
...@@ -2553,6 +2556,7 @@ static int qemudDomainHotplugVcpus(virDomainObjPtr vm, unsigned int nvcpus) ...@@ -2553,6 +2556,7 @@ static int qemudDomainHotplugVcpus(virDomainObjPtr vm, unsigned int nvcpus)
cleanup: cleanup:
qemuDomainObjExitMonitor(vm); qemuDomainObjExitMonitor(vm);
qemuDomainVcpuAudit(vm, oldvcpus, nvcpus, "update", rc == 1);
return ret; return ret;
unsupported: unsupported:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册