From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:46210) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TM0n8-00085S-9S for qemu-devel@nongnu.org; Wed, 10 Oct 2012 14:13:59 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1TM0n3-00066t-87 for qemu-devel@nongnu.org; Wed, 10 Oct 2012 14:13:58 -0400 Received: from mx1.redhat.com ([209.132.183.28]:3214) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1TM0n2-00066i-Vi for qemu-devel@nongnu.org; Wed, 10 Oct 2012 14:13:53 -0400 Received: from int-mx02.intmail.prod.int.phx2.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id q9AIDqQr010634 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK) for ; Wed, 10 Oct 2012 14:13:52 -0400 Message-ID: <5075BADF.2070402@redhat.com> Date: Wed, 10 Oct 2012 12:13:51 -0600 From: Eric Blake MIME-Version: 1.0 References: <37ca1a150224c144f9329fc8408f78c388f50a02.1349848348.git.jcody@redhat.com> In-Reply-To: <37ca1a150224c144f9329fc8408f78c388f50a02.1349848348.git.jcody@redhat.com> Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="------------enigD4ACAB45A122F25B1C470EEA" Subject: Re: [Qemu-devel] [PATCH 1/2] block: make bdrv_find_backing_image compare canonical filenames List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jeff Cody Cc: kwolf@redhat.com, pbonzini@redhat.com, qemu-devel@nongnu.org This is an OpenPGP/MIME signed message (RFC 2440 and 3156) --------------enigD4ACAB45A122F25B1C470EEA Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On 10/09/2012 11:56 PM, Jeff Cody wrote: > Currently, bdrv_find_backing_image compares bs->backing_file with > what is passed in as a backing_file name. Mismatches may occur, > however, when bs->backing_file and backing_file are both not > absolute or relative. >=20 > Use path_combine() to make sure any relative backing filenames are > relative to the current image filename being searched, and then use > realpath() to make all comparisons based on absolute filenames. >=20 > This also changes bdrv_find_backing_image to no longer be recursive, > but iterative. >=20 > Signed-off-by: Jeff Cody > --- > block.c | 38 ++++++++++++++++++++++++++++++++------ > 1 file changed, 32 insertions(+), 6 deletions(-) >=20 > diff --git a/block.c b/block.c > index e95f613..641b8fa 100644 > --- a/block.c > +++ b/block.c > @@ -3123,18 +3123,44 @@ int bdrv_snapshot_load_tmp(BlockDriverState *bs= , > return -ENOTSUP; > } > =20 > +/* backing_file can either be relative, or absolute. If it is > + * relative, it must be relative to the chain. So, passing in > + * bs->filename from a BDS as backing_file should not be done, > + * as that may be relative to the CWD rather than the chain. */ > BlockDriverState *bdrv_find_backing_image(BlockDriverState *bs, > const char *backing_file) > { > - if (!bs->drv) { > + char filename_full[PATH_MAX]; > + char backing_file_full[PATH_MAX]; > + char filename_tmp[PATH_MAX]; That's a LOT of stack space, which risks stack overflow, will mostly be unused, and still doesn't work if you have super-deep hierarchies larger than PATH_MAX. Would you be better off using realpath(,NULL) for its allocating semantics, and then free()ing the results? --=20 Eric Blake eblake@redhat.com +1-919-301-3266 Libvirt virtualization library http://libvirt.org --------------enigD4ACAB45A122F25B1C470EEA Content-Type: application/pgp-signature; name="signature.asc" Content-Description: OpenPGP digital signature Content-Disposition: attachment; filename="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) Comment: Public key at http://people.redhat.com/eblake/eblake.gpg Comment: Using GnuPG with Mozilla - http://www.enigmail.net/ iQEcBAEBCAAGBQJQdbrfAAoJEKeha0olJ0Nqo3wIAKgXblMrI0ARPFkXNg7BXhhG dQ8bUEZQP2qazHqyeqGv6k0x0wr797Ka3eSj9vxjFSjjaMU53tkoiJQuAPlmTlff VjueX+pmcNWPua2WoRvOBYnkg4O5x6+0F8U2q5BKGHCUgq+tcx2++oAjgYkfLxKC lB01zQbfayn23OWhysGLvgPnK+IITNo4eIQGCwr4CFZPGb6+VcGk+irCqgiI70Zg SNe0xMmYDImHNfDL61/nWWZbDoyFpY8MbUJLIaT4DKxNi/U0SR0JAVVC5C/cuFox CpuUkCuaRlEmpcRunOjUDK7IoeA1ff5BGs37U3ef5sOHKVctwcc6BvpoLM57Wp0= =67Nz -----END PGP SIGNATURE----- --------------enigD4ACAB45A122F25B1C470EEA--