提交 27431ec9 编写于 作者: M Martin Kletzander

CVE-2014-8131: Fix possible deadlock and segfault in qemuConnectGetAllDomainStats()

When user doesn't have read access on one of the domains he requested,
the for loop could exit abruptly or continue and override pointer which
pointed to locked object.

This patch fixed two issues at once.  One is that domflags might have
had QEMU_DOMAIN_STATS_HAVE_JOB even when there was no job started (this
is fixed by doing domflags |= QEMU_DOMAIN_STATS_HAVE_JOB only when the
job was acquired and cleaning domflags on every start of the loop.
Second one is that the domain is kept locked when
virConnectGetAllDomainStatsCheckACL() fails and continues the loop when
it didn't end.  Adding a simple virObjectUnlock() and clearing the
pointer ought to do.
Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>
(cherry picked from commit 57023c0a)
Signed-off-by: NMartin Kletzander <mkletzan@redhat.com>

Conflicts:
	src/qemu/qemu_driver.c -- GetAllDomainStats did not use jobs
                                  before 1f4831ee
上级 6842f148
......@@ -17368,8 +17368,11 @@ qemuConnectGetAllDomainStats(virConnectPtr conn,
continue;
if (!domlist &&
!virConnectGetAllDomainStatsCheckACL(conn, dom->def))
!virConnectGetAllDomainStatsCheckACL(conn, dom->def)) {
virObjectUnlock(dom);
dom = NULL;
continue;
}
if (qemuDomainGetStats(conn, dom, stats, &tmp, flags) < 0)
goto cleanup;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册