In certain buggy conditions qemu can create an image which has empty string stored as 'data_file'. While probing libvirt would consider the empty string as a relative file name and construct the path using the path of the parent image stripping the last component and appending the empty string. This results into attempting to using a directory as an image and thus the following error when attempting to start VM with such an image: error: unsupported configuration: storage type 'dir' requires use of storage format 'fat' Reject empty strings passed in as 'data_file'. Note that we do not have the same problem with 'backing store' as an empty string there is interpreted as no backing file both by qemu and libvirt. Resolves: https://issues.redhat.com/browse/RHEL-70627 Signed-off-by: Peter Krempa <pkrempa@xxxxxxxxxx> --- src/storage_file/storage_source.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/storage_file/storage_source.c b/src/storage_file/storage_source.c index 4612e710b0..fa59949cf2 100644 --- a/src/storage_file/storage_source.c +++ b/src/storage_file/storage_source.c @@ -557,6 +557,16 @@ virStorageSourceNewFromDataFile(virStorageSource *parent) g_autoptr(virStorageSource) dataFile = NULL; int rc; + /* 'qemu-img' records an empty string as 'data_file' field in certain buggy + * cases. Note that it can't happen for 'backing store' as absence of the + * string equals to no backing store. */ + if (STREQ(parent->dataFileRaw, "")) { + virReportError(VIR_ERR_OPERATION_FAILED, + _("invalid empty data-file definition in '%1$s'"), + NULLSTR(parent->path)); + return NULL; + } + if ((rc = virStorageSourceNewFromChild(parent, parent->dataFileRaw, &dataFile)) < 0) -- 2.47.1