On 11/06/2013 11:50 AM, Max Reitz wrote: > It should be possible to execute the QMP "drive-mirror" command in > "none" sync mode and "absolute-paths" mode even for block devices > lacking a backing file. > > "absolute-paths" does in fact not require a backing file to be present, > as can be seen from the "top" sync mode code path. "top" basically > states that the device should indeed have a backing file - however, the > current code catches the case if it doesn't and then simply treats it as > "full" sync mode, creating a target image without a backing file (in > "absolute-paths" mode). Thus, "absolute-paths" does not imply the target > file must indeed have a backing file. > > Therefore, the target file may be left unbacked in case of "none" sync > mode as well, if the specified device is not backed either. Currently, > qemu will crash trying to dereference the backing file pointer since it > assumes that it will always be non-NULL in that case ("none" with > "absolute-paths"). > > Signed-off-by: Max Reitz <mre...@redhat.com> > --- > blockdev.c | 4 +++- > 1 file changed, 3 insertions(+), 1 deletion(-)
Reviewed-by: Eric Blake <ebl...@redhat.com> > > diff --git a/blockdev.c b/blockdev.c > index b260477..1c426b0 100644 > --- a/blockdev.c > +++ b/blockdev.c > @@ -2026,7 +2026,9 @@ void qmp_drive_mirror(const char *device, const char > *target, > return; > } > > - if (sync == MIRROR_SYNC_MODE_FULL && mode != NEW_IMAGE_MODE_EXISTING) { > + if ((sync == MIRROR_SYNC_MODE_FULL || !source) > + && mode != NEW_IMAGE_MODE_EXISTING) > + { > /* create new image w/o backing file */ > assert(format && drv); > bdrv_img_create(target, format, > -- Eric Blake eblake redhat com +1-919-301-3266 Libvirt virtualization library http://libvirt.org
signature.asc
Description: OpenPGP digital signature