• J
    storage: Resolve storage driver crash · 2dd70901
    John Ferlan 提交于
    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
    ...
    2dd70901
storage_driver.c 88.7 KB