[libvirt] [PATCH] Fix bug in storage driver accessing wrong private data

* src/storage/storage_driver.c: Fix IsPersistent() and IsActivE() methods on storage pools to use 'storagePrivateData' instead of 'privateData'. Also fix naming convention of objects --- src/storage/storage_driver.c | 16 ++++++++-------- 1 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index fadba57..4a49089 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -466,17 +466,17 @@ cleanup: } -static int storagePoolIsActive(virStoragePoolPtr net) +static int storagePoolIsActive(virStoragePoolPtr pool) { - virStorageDriverStatePtr driver = net->conn->privateData; + virStorageDriverStatePtr driver = pool->conn->storagePrivateData; virStoragePoolObjPtr obj; int ret = -1; storageDriverLock(driver); - obj = virStoragePoolObjFindByUUID(&driver->pools, net->uuid); + obj = virStoragePoolObjFindByUUID(&driver->pools, pool->uuid); storageDriverUnlock(driver); if (!obj) { - virStorageReportError(net->conn, VIR_ERR_NO_STORAGE_POOL, NULL); + virStorageReportError(pool->conn, VIR_ERR_NO_STORAGE_POOL, NULL); goto cleanup; } ret = virStoragePoolObjIsActive(obj); @@ -487,17 +487,17 @@ cleanup: return ret; } -static int storagePoolIsPersistent(virStoragePoolPtr net) +static int storagePoolIsPersistent(virStoragePoolPtr pool) { - virStorageDriverStatePtr driver = net->conn->privateData; + virStorageDriverStatePtr driver = pool->conn->storagePrivateData; virStoragePoolObjPtr obj; int ret = -1; storageDriverLock(driver); - obj = virStoragePoolObjFindByUUID(&driver->pools, net->uuid); + obj = virStoragePoolObjFindByUUID(&driver->pools, pool->uuid); storageDriverUnlock(driver); if (!obj) { - virStorageReportError(net->conn, VIR_ERR_NO_STORAGE_POOL, NULL); + virStorageReportError(pool->conn, VIR_ERR_NO_STORAGE_POOL, NULL); goto cleanup; } ret = obj->configFile ? 1 : 0; -- 1.6.5.2

On Wed, Dec 09, 2009 at 09:39:17AM +0000, Daniel P. Berrange wrote:
* src/storage/storage_driver.c: Fix IsPersistent() and IsActivE() methods on storage pools to use 'storagePrivateData' instead of 'privateData'. Also fix naming convention of objects
Looks correct - ACK. This fixes the crash in libvirtd? Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones New in Fedora 11: Fedora Windows cross-compiler. Compile Windows programs, test, and build Windows installers. Over 70 libraries supprt'd http://fedoraproject.org/wiki/MinGW http://www.annexia.org/fedora_mingw

On Wed, Dec 09, 2009 at 09:47:44AM +0000, Richard W.M. Jones wrote:
On Wed, Dec 09, 2009 at 09:39:17AM +0000, Daniel P. Berrange wrote:
* src/storage/storage_driver.c: Fix IsPersistent() and IsActivE() methods on storage pools to use 'storagePrivateData' instead of 'privateData'. Also fix naming convention of objects
Looks correct - ACK. This fixes the crash in libvirtd?
Yes, it may or may not crash depending mostly on luck. It didn't crash for me, but it certainly wouldn't give the answer you'd want :-) Daniel -- |: Red Hat, Engineering, London -o- http://people.redhat.com/berrange/ :| |: http://libvirt.org -o- http://virt-manager.org -o- http://ovirt.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: GnuPG: 7D3B9505 -o- F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 :|

On Wed, Dec 09, 2009 at 09:39:17AM +0000, Daniel P. Berrange wrote:
* src/storage/storage_driver.c: Fix IsPersistent() and IsActivE() methods on storage pools to use 'storagePrivateData' instead of 'privateData'. Also fix naming convention of objects --- src/storage/storage_driver.c | 16 ++++++++-------- 1 files changed, 8 insertions(+), 8 deletions(-)
diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index fadba57..4a49089 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -466,17 +466,17 @@ cleanup: }
-static int storagePoolIsActive(virStoragePoolPtr net) +static int storagePoolIsActive(virStoragePoolPtr pool) { - virStorageDriverStatePtr driver = net->conn->privateData; + virStorageDriverStatePtr driver = pool->conn->storagePrivateData; virStoragePoolObjPtr obj; int ret = -1;
storageDriverLock(driver); - obj = virStoragePoolObjFindByUUID(&driver->pools, net->uuid); + obj = virStoragePoolObjFindByUUID(&driver->pools, pool->uuid); storageDriverUnlock(driver); if (!obj) { - virStorageReportError(net->conn, VIR_ERR_NO_STORAGE_POOL, NULL); + virStorageReportError(pool->conn, VIR_ERR_NO_STORAGE_POOL, NULL); goto cleanup; } ret = virStoragePoolObjIsActive(obj); @@ -487,17 +487,17 @@ cleanup: return ret; }
-static int storagePoolIsPersistent(virStoragePoolPtr net) +static int storagePoolIsPersistent(virStoragePoolPtr pool) { - virStorageDriverStatePtr driver = net->conn->privateData; + virStorageDriverStatePtr driver = pool->conn->storagePrivateData; virStoragePoolObjPtr obj; int ret = -1;
storageDriverLock(driver); - obj = virStoragePoolObjFindByUUID(&driver->pools, net->uuid); + obj = virStoragePoolObjFindByUUID(&driver->pools, pool->uuid); storageDriverUnlock(driver); if (!obj) { - virStorageReportError(net->conn, VIR_ERR_NO_STORAGE_POOL, NULL); + virStorageReportError(pool->conn, VIR_ERR_NO_STORAGE_POOL, NULL); goto cleanup; } ret = obj->configFile ? 1 : 0;
ah, it's conn->storagePrivateData instead of conn->privateData, I initially got confused why the argument rename would fix something... ACK ! Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@veillard.com | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/
participants (3)
-
Daniel P. Berrange
-
Daniel Veillard
-
Richard W.M. Jones