From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:58629) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vdly2-0003OC-9O for qemu-devel@nongnu.org; Tue, 05 Nov 2013 14:07:16 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Vdlxw-0007qi-1W for qemu-devel@nongnu.org; Tue, 05 Nov 2013 14:07:10 -0500 Received: from mx1.redhat.com ([209.132.183.28]:38518) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Vdlxv-0007qb-Qf for qemu-devel@nongnu.org; Tue, 05 Nov 2013 14:07:03 -0500 Received: from int-mx11.intmail.prod.int.phx2.redhat.com (int-mx11.intmail.prod.int.phx2.redhat.com [10.5.11.24]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id rA5J73U1029019 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Tue, 5 Nov 2013 14:07:03 -0500 Message-ID: <527941D3.1040107@redhat.com> Date: Tue, 05 Nov 2013 20:06:59 +0100 From: Max Reitz MIME-Version: 1.0 References: <1383611706-22107-1-git-send-email-mreitz@redhat.com> <1383611706-22107-2-git-send-email-mreitz@redhat.com> <527866C2.2090803@redhat.com> In-Reply-To: <527866C2.2090803@redhat.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v2 1/2] block/drive-mirror: Check for NULL backing_hd List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Fam Zheng , qemu-devel@nongnu.org Cc: Kevin Wolf , Stefan Hajnoczi On 05.11.2013 04:32, Fam Zheng wrote: > > On 11/05/2013 08:35 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 >> --- >> blockdev.c | 4 ++-- >> 1 file changed, 2 insertions(+), 2 deletions(-) >> >> diff --git a/blockdev.c b/blockdev.c >> index b260477..986e59d 100644 >> --- a/blockdev.c >> +++ b/blockdev.c >> @@ -2038,8 +2038,8 @@ void qmp_drive_mirror(const char *device, const >> char *target, >> case NEW_IMAGE_MODE_ABSOLUTE_PATHS: >> /* create new image with backing file */ >> bdrv_img_create(target, format, >> - source->filename, >> - source->drv->format_name, >> + source ? source->filename : NULL, >> + source ? source->drv->format_name : NULL, >> NULL, size, flags, &local_err, false); >> break; >> default: > The code around here is: > > 2029 if (sync == MIRROR_SYNC_MODE_FULL && mode != > NEW_IMAGE_MODE_EXISTING) { > 2030 /* create new image w/o backing file */ > 2031 assert(format && drv); > 2032 bdrv_img_create(target, format, > 2033 NULL, NULL, NULL, size, flags, > &local_err, false); > 2034 } else { > 2035 switch (mode) { > 2036 case NEW_IMAGE_MODE_EXISTING: > 2037 break; > 2038 case NEW_IMAGE_MODE_ABSOLUTE_PATHS: > 2039 /* create new image with backing file */ > 2040 bdrv_img_create(target, format, > 2041 source->filename, > 2042 source->drv->format_name, > 2043 NULL, size, flags, &local_err, false); > 2044 break; > 2045 default: > 2046 abort(); > 2047 } > 2048 } > > Why not update the if condition and reuse the branch, I think this is > a better branching? Either should be fine, but in your change you > should also update the comment in line 2039. Okay, I'll go for updating the condition. Max > Thanks, > Fam