[libvirt] [PATCH v2] storage: Resolve storage driver crash

Ján Tomko jtomko at redhat.com
Thu Nov 16 14:22:23 UTC 2017


On Thu, Nov 16, 2017 at 09:06:23AM -0500, John Ferlan wrote:
>Resolve a storage driver crash as a result of a long running
>storageVolCreateXML when the virStorageVolPoolRefreshThread is
>run as a result of when a storageVolUpload completed and ran the
>virStoragePoolObjClearVols without checking if the creation
>code was currently processing a buildVol after incrementing
>the driver->asyncjob count.
>
>The refreshThread will now check the pool asyncjob count before
>attempting to pursue the pool refresh. Adjust the documentation
>to describe the condition.
>
>Crash from valgrind is as follows (with a bit of editing):
>
>==21309== Invalid read of size 8
>==21309==    at 0x153E47AF: storageBackendUpdateVolTargetInfo
>==21309==    by 0x153E4C30: virStorageBackendUpdateVolInfo
>==21309==    by 0x153E52DE: virStorageBackendVolRefreshLocal
>==21309==    by 0x153DE29E: storageVolCreateXML
>==21309==    by 0x562035B: virStorageVolCreateXML
>==21309==    by 0x147366: remoteDispatchStorageVolCreateXML
>...
>==21309==  Address 0x2590a720 is 64 bytes inside a block of size 336 free'd
>==21309==    at 0x4C2F2BB: free
>==21309==    by 0x54CB9FA: virFree
>==21309==    by 0x55BC800: virStorageVolDefFree
>==21309==    by 0x55BF1D8: virStoragePoolObjClearVols
>==21309==    by 0x153D967E: virStorageVolPoolRefreshThread
>...
>==21309==  Block was alloc'd at
>==21309==    at 0x4C300A5: calloc
>==21309==    by 0x54CB483: virAlloc
>==21309==    by 0x55BDC1F: virStorageVolDefParseXML
>==21309==    by 0x55BDC1F: virStorageVolDefParseNode
>==21309==    by 0x55BE5A4: virStorageVolDefParse
>==21309==    by 0x153DDFF1: storageVolCreateXML
>==21309==    by 0x562035B: virStorageVolCreateXML
>==21309==    by 0x147366: remoteDispatchStorageVolCreateXML
>...
>
>Signed-off-by: John Ferlan <jferlan at redhat.com>
>---
>
> v1: https://www.redhat.com/archives/libvir-list/2017-November/msg00198.html
>
> Changes since v1:
>   - From review, remove the retry if Asyncjobs > 0 logic and replace with
>     a VIR_DEBUG indicating not doing refresh due to Asyncjob running and
>     just goto cleanup.
>
>   - Adjust the virStorageVolUpload docs to note that an attempt will be
>     made to refresh the pool.
>
>   - Drop patch 2 which added the Asyncjobs > 0 check to the SCSI pool
>     refresh thread. Since a SCSI pool doesn't support buildVol, the
>     asyncjob count cannot be anything other than zero, so it's pointless.
>
> src/libvirt-storage.c        | 3 ++-
> src/storage/storage_driver.c | 7 +++++++
> 2 files changed, 9 insertions(+), 1 deletion(-)
>

ACK

Jan
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: Digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20171116/a16d35bc/attachment-0001.sig>


More information about the libvir-list mailing list