提交 ffa5066a 编写于 作者: J Jonathon Jongsma 提交者: Michal Privoznik

qemu: remove use of qemuDomainObjBeginJobWithAgent()

This function will be removed in a future commit because it allows the
caller to acquire both monitor and agent jobs at the same time. Holding
both job types creates a vulnerability to denial of service from a
malicious guest agent.

qemuDomainSetVcpusFlags() always passes NONE for either the monitor job
or the agent job (and thus is not vulnerable to the DoS), so we can
simply replace this function with the functions for acquiring the
appropriate type of job.
Signed-off-by: NJonathon Jongsma <jjongsma@redhat.com>
Reviewed-by: NMichal Privoznik <mprivozn@redhat.com>
上级 e005c95f
......@@ -5039,8 +5039,6 @@ qemuDomainSetVcpusFlags(virDomainPtr dom,
virDomainDefPtr persistentDef;
bool hotpluggable = !!(flags & VIR_DOMAIN_VCPU_HOTPLUGGABLE);
bool useAgent = !!(flags & VIR_DOMAIN_VCPU_GUEST);
qemuDomainJob job = QEMU_JOB_NONE;
qemuDomainAgentJob agentJob = QEMU_AGENT_JOB_NONE;
int ret = -1;
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE |
......@@ -5055,13 +5053,14 @@ qemuDomainSetVcpusFlags(virDomainPtr dom,
if (virDomainSetVcpusFlagsEnsureACL(dom->conn, vm->def, flags) < 0)
goto cleanup;
if (useAgent)
agentJob = QEMU_AGENT_JOB_MODIFY;
else
job = QEMU_JOB_MODIFY;
if (qemuDomainObjBeginJobWithAgent(driver, vm, job, agentJob) < 0)
goto cleanup;
if (useAgent) {
if (qemuDomainObjBeginAgentJob(driver, vm, QEMU_AGENT_JOB_MODIFY) < 0)
goto cleanup;
} else {
if (qemuDomainObjBeginJob(driver, vm, QEMU_JOB_MODIFY) < 0)
goto cleanup;
}
if (virDomainObjGetDefs(vm, flags, &def, &persistentDef) < 0)
goto endjob;
......@@ -5075,7 +5074,7 @@ qemuDomainSetVcpusFlags(virDomainPtr dom,
nvcpus, hotpluggable);
endjob:
if (agentJob)
if (useAgent)
qemuDomainObjEndAgentJob(vm);
else
qemuDomainObjEndJob(driver, vm);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册