[libvirt] [PATCH] nwfilter: Add missing driver lock in qemu driver

This adds a missing driver lock in the qemu driver to protect the list of domains. Signed-off-by: Stefan Berger <stefanb@us.ibm.com> --- src/qemu/qemu_driver.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) Index: libvirt-acl/src/qemu/qemu_driver.c =================================================================== --- libvirt-acl.orig/src/qemu/qemu_driver.c +++ libvirt-acl/src/qemu/qemu_driver.c @@ -11869,11 +11869,15 @@ static virStateDriver qemuStateDriver = }; static int -qemudVMFilterRebuild(virConnectPtr conn, +qemudVMFilterRebuild(virConnectPtr conn ATTRIBUTE_UNUSED, virHashIterator iter, void *data) { - (void)conn; + struct qemud_driver *driver = qemu_driver; + + qemuDriverLock(driver); virHashForEach(qemu_driver->domains.objs, iter, data); + qemuDriverUnlock(driver); + return 0; }

On 05/14/2010 11:39 AM, Stefan Berger wrote:
This adds a missing driver lock in the qemu driver to protect the list of domains.
Signed-off-by: Stefan Berger <stefanb@us.ibm.com>
--- src/qemu/qemu_driver.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
Index: libvirt-acl/src/qemu/qemu_driver.c =================================================================== --- libvirt-acl.orig/src/qemu/qemu_driver.c +++ libvirt-acl/src/qemu/qemu_driver.c @@ -11869,11 +11869,15 @@ static virStateDriver qemuStateDriver = };
static int -qemudVMFilterRebuild(virConnectPtr conn, +qemudVMFilterRebuild(virConnectPtr conn ATTRIBUTE_UNUSED, virHashIterator iter, void *data) { - (void)conn; + struct qemud_driver *driver = qemu_driver; + + qemuDriverLock(driver); virHashForEach(qemu_driver->domains.objs, iter, data); + qemuDriverUnlock(driver); + return 0;
ACK. -- Eric Blake eblake@redhat.com +1-801-349-2682 Libvirt virtualization library http://libvirt.org

On Fri, May 14, 2010 at 01:39:28PM -0400, Stefan Berger wrote:
This adds a missing driver lock in the qemu driver to protect the list of domains.
Signed-off-by: Stefan Berger <stefanb@us.ibm.com>
--- src/qemu/qemu_driver.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
Index: libvirt-acl/src/qemu/qemu_driver.c =================================================================== --- libvirt-acl.orig/src/qemu/qemu_driver.c +++ libvirt-acl/src/qemu/qemu_driver.c @@ -11869,11 +11869,15 @@ static virStateDriver qemuStateDriver = };
static int -qemudVMFilterRebuild(virConnectPtr conn, +qemudVMFilterRebuild(virConnectPtr conn ATTRIBUTE_UNUSED, virHashIterator iter, void *data) { - (void)conn; + struct qemud_driver *driver = qemu_driver; + + qemuDriverLock(driver); virHashForEach(qemu_driver->domains.objs, iter, data); + qemuDriverUnlock(driver); + return 0; }
ACK, traced back the code for 'iter' and that's already correctly locking the elements when it accesses them, so this is only bit broken. Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://deltacloud.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

On Sun, 2010-05-16 at 10:08 +0100, Daniel P. Berrange wrote:
On Fri, May 14, 2010 at 01:39:28PM -0400, Stefan Berger wrote:
This adds a missing driver lock in the qemu driver to protect the list of domains.
Signed-off-by: Stefan Berger <stefanb@us.ibm.com>
--- src/qemu/qemu_driver.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
Index: libvirt-acl/src/qemu/qemu_driver.c =================================================================== --- libvirt-acl.orig/src/qemu/qemu_driver.c +++ libvirt-acl/src/qemu/qemu_driver.c @@ -11869,11 +11869,15 @@ static virStateDriver qemuStateDriver = };
static int -qemudVMFilterRebuild(virConnectPtr conn, +qemudVMFilterRebuild(virConnectPtr conn ATTRIBUTE_UNUSED, virHashIterator iter, void *data) { - (void)conn; + struct qemud_driver *driver = qemu_driver; + + qemuDriverLock(driver); virHashForEach(qemu_driver->domains.objs, iter, data); + qemuDriverUnlock(driver); + return 0; }
ACK, traced back the code for 'iter' and that's already correctly locking the elements when it accesses them, so this is only bit broken.
The above lock protects the hash table from manipulation while traversing it. Stefan
participants (3)
-
Daniel P. Berrange
-
Eric Blake
-
Stefan Berger