
On 11/21/12 15:14, Eric Blake wrote:
On 11/21/2012 04:05 AM, Peter Krempa wrote:
Commit e0c469e58b93f852a72265919703cb6abd3779f8 that fixes the detection of image chain wasn't complete. Iteration through the backing image chain has to stop at the last existing image if some of the images are missing otherwise the backing chain that is cached contains entries with paths being set to NULL resulting to:
error: Unable to allow access for disk path (null): Bad address
Fortunately stat() is kind enough not to crash when it's presented with a NULL argument.
That's only true for stat() on Linux; other OSs are fully entitled to crash, so this definitely needs fixing :)
--- src/util/storage_file.c | 2 ++ 1 file changed, 2 insertions(+)
diff --git a/src/util/storage_file.c b/src/util/storage_file.c index 2249212..e7cbea7 100644 --- a/src/util/storage_file.c +++ b/src/util/storage_file.c @@ -729,6 +729,8 @@ virStorageFileGetMetadataFromBuf(int format, if (meta->backingStore == NULL) { /* the backing file is (currently) unavailable, treat this * file as standalone */ + VIR_FREE(meta->backingStoreRaw);
Also I should explain the following thing: This freeing of meta->backingStoreRaw actualy doesn't fix the bug. It just felt a right thing to do when the backing file is missing.
+ meta->backingStoreIsFile = false;
This line is the actual fix. The code that recursively detects the image chain uses this value as a marker if another iteration of the recursion is needed (on the non-existing file).
backingFormat = VIR_STORAGE_FILE_NONE;
Hmm, I'm wondering if this is the right place to fix it, or if we are throwing away information too early. That is, are we sure it is not the later client of the chain at fault for not recognizing VIR_STORAGE_FILE_NONE coupled with non-NULL backingStoreRaw as the key for whether a backing file is missing? I'm guessing domain_conf.c:virDomainDiskDefForeachPath would be the real function to fix here.
I will add the check also here, but I'd like to discuss the creating of the chain in the first place.
-- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list