From: Ram Pai <linuxram@us.ibm.com>
To: Jan Kiszka <jan.kiszka@siemens.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
Anthony Liguori <aliguori@us.ibm.com>,
qemu-devel@nongnu.org, kvm-devel <kvm@vger.kernel.org>
Subject: [Qemu-devel] Re: [PATCH] rev5: support colon in filenames
Date: Wed, 15 Jul 2009 10:03:15 -0700 [thread overview]
Message-ID: <1247677395.14246.38.camel@localhost> (raw)
In-Reply-To: <4A5DA1B7.5000204@siemens.com>
On Wed, 2009-07-15 at 11:30 +0200, Jan Kiszka wrote:
> Ram Pai wrote:
> > Problem: It is impossible to feed filenames with the character colon because
> > qemu interprets such names as a protocol. For example filename scsi:0, is
> > interpreted as a protocol by name "scsi".
> >
> > This patch allows user to espace colon characters. For example the above
> > filename can now be expressed either as 'scsi\:0' or as file:scsi:0
> >
> > anything following the "file:" tag is interpreted verbatin. However if "file:"
> > tag is omitted then any colon characters in the string must be escaped using
> > backslash.
> >
> > Here are couple of examples:
> >
> > scsi\:0\:abc is a local file scsi:0:abc
> > http\://myweb is a local file by name http://myweb
> > file:scsi:0:abc is a local file scsi:0:abc
> > file:http://myweb is a local file by name http://myweb
> >
> > fat:c:\path\to\dir\:floppy\: is a fat file by name \path\to\dir:floppy:
> > NOTE:The above example cannot be expressed using the "file:" protocol.
> >
> >
> > Changelog w.r.t to iteration 0:
> > 1) removes flexibility added to nbd semantics eg -- nbd:\::9999
> > 2) introduce the file: protocol to indicate local file
> >
> > Changelog w.r.t to iteration 1:
> > 1) generically handles 'file:' protocol in find_protocol
> > 2) centralizes 'filename' pruning before the call to open().
> > 3) fixes buffer overflow seen in fill_token()
> > 4) adheres to codying style
> > 5) patch against upstream qemu tree
> >
> > Changelog w.r.t to iteration 2:
> > 1) really really fixes buffer overflow seen in
> > fill_token() (if not, beat me :)
> > 2) the centralized 'filename' pruning had a side effect with
> > qcow2 files and other files. Fixed it. _open() is back.
> >
> > Changelog w.r.t to iteration 3:
> > 1) support added to raw-win32.c (i do not have the setup to
> > test this change. Request help with testing)
> > 2) ability to espace option-values containing commas using
> > backslashes
> > eg file=file:abc,, can also be expressed as file=file:abc\,
> > where 'abc,' is a filename
> > 3) fixes a bug (reported by Jan Kiszka) w.r.t support for -snapshot
>
> Yep, that's fixed in this version.
>
> > 4) renamed _open() to qemu_open() and removed dependency on PATH_MAX
> >
> > Changelog w.r.t to iteration 4:
> > 1) applies to upstream qemu and qemu-kvm tree
> >
> >
> > Signed-off-by: Ram Pai <linuxram@us.ibm.com>
> >
> >
> > block.c | 30 +++-------------
> > block/raw-posix.c | 35 ++++++++++++++----
> > block/raw-win32.c | 26 ++++++++++++--
> > block/vvfat.c | 97 ++++++++++++++++++++++++++++++++++++++++++++++++-
> > cutils.c | 26 +++++++++++++
> > qemu-common.h | 1 +
> > qemu-option.c | 8 ++++-
> > 8 files changed, 185 insertions(+), 38 deletions(-)
> >
> > diff --git a/block.c b/block.c
>
> ...
>
> > @@ -359,25 +351,15 @@ int bdrv_open2(BlockDriverState *bs, const char *filename, int flags,
> > }
> > total_size = bdrv_getlength(bs1) >> SECTOR_BITS;
> >
> > - if (bs1->drv && bs1->drv->protocol_name)
> > - is_protocol = 1;
> > -
> > bdrv_delete(bs1);
> >
> > get_tmp_filename(tmp_filename, sizeof(tmp_filename));
> >
> > - /* Real path is meaningless for protocols */
> > - if (is_protocol)
> > - snprintf(backing_filename, sizeof(backing_filename),
> > - "%s", filename);
> > - else
> > - realpath(filename, backing_filename);
> > -
>
> This removes realpath without any replacement, right? Did you verify
> that this doesn't break anything, namely snapshots with relative paths
> for the backing image? Please check commit a817d93 and provide a
> reasoning why it's safe to drop it.
I have verified with relative paths and it works.
After analyzing the code, i came to the conclusion that call to
realpath() adds no real value.
The logic in bdrv_open2() is something like this
bdrv_open2()
{
if (snapshot) {
backup = realpath(filename);
filename=generate_a_temp_file();
}
drv=parse_and_get_bdrv(filename);
drv->bdrv_open(filename);
if (backup) {
bdrv_open2(backup);
}
}
in the above function, the call to realpath() would have been useful had
it changed the current working directory before calling
bdrv_open2(backup). It does not. If in case any function within
drv->bdrv_open change the cwd, then I expect them to restore before
returning.
Also drv->bdrv_open() can anyway handle relative paths.
Hence I conclude that the call to realpath() adds no value.
Do you see a flaw in this logic?
RP
>
> Jan
>
next prev parent reply other threads:[~2009-07-15 17:03 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1245862739.6278.7.camel@localhost>
2009-06-24 17:57 ` [Qemu-devel] Re: [PATCH] support colon in filenames Ram Pai
2009-06-25 9:14 ` Kevin Wolf
2009-06-25 17:52 ` Ram Pai
2009-06-26 6:53 ` Kevin Wolf
2009-06-26 6:38 ` [Qemu-devel] rev1 " Ram Pai
2009-06-26 7:45 ` [Qemu-devel] " Kevin Wolf
2009-06-27 0:41 ` [Qemu-devel] rev2 " Ram Pai
2009-07-02 5:08 ` [Qemu-devel] [PATCH] rev3: " Ram Pai
2009-07-02 8:52 ` Kevin Wolf
2009-07-02 12:52 ` Anthony Liguori
2009-07-02 13:18 ` Kevin Wolf
2009-07-08 8:30 ` [Qemu-devel] [PATCH] rev4: " Ram Pai
2009-07-08 15:05 ` [Qemu-devel] " Jan Kiszka
2009-07-10 13:31 ` Anthony Liguori
2009-07-15 7:51 ` [Qemu-devel] [PATCH] rev5: " Ram Pai
2009-07-15 9:30 ` [Qemu-devel] " Jan Kiszka
2009-07-15 17:03 ` Ram Pai [this message]
2009-07-15 18:20 ` Jamie Lokier
2009-07-15 18:44 ` Ram Pai
2009-07-15 21:04 ` [Qemu-devel] qcow2 relative paths (was: [PATCH] rev5: support colon in filenames) Jamie Lokier
2009-07-15 21:14 ` [Qemu-devel] Re: qcow2 relative paths Jan Kiszka
2009-07-16 2:28 ` [Qemu-devel] Re: qcow2 relative paths (was: [PATCH] rev5: support colon in filenames) Ram Pai
2009-07-16 7:38 ` [Qemu-devel] Re: qcow2 relative paths Kevin Wolf
2009-07-16 7:51 ` Ram Pai
2009-07-16 7:39 ` [Qemu-devel] [PATCH] rev6: support colon in filenames Ram Pai
2009-07-17 23:17 ` [Qemu-devel] [PATCH] rev7: " Ram Pai
2009-07-21 12:42 ` [Qemu-devel] " Kevin Wolf
2009-08-06 6:27 ` Ram Pai
2009-08-06 6:47 ` [Qemu-devel] [PATCH] rev8: " Ram Pai
2009-07-15 15:04 ` [Qemu-devel] [PATCH] rev5: " Blue Swirl
2009-07-15 15:14 ` Anthony Liguori
2009-07-15 15:29 ` Blue Swirl
2009-07-15 15:40 ` Anthony Liguori
2009-07-15 16:42 ` Kevin Wolf
2009-07-15 17:47 ` Michael S. Tsirkin
2009-07-16 10:57 ` Amit Shah
2009-07-16 13:43 ` Markus Armbruster
2009-07-16 14:10 ` Anthony Liguori
2009-07-16 15:13 ` Gerd Hoffmann
2009-07-16 15:12 ` Gerd Hoffmann
2009-07-15 15:34 ` Kevin Wolf
2009-07-15 15:41 ` Anthony Liguori
2009-07-15 15:52 ` Paul Brook
2009-07-15 16:03 ` Gerd Hoffmann
2009-07-15 16:08 ` Paul Brook
2009-07-16 7:39 ` Ram Pai
2009-07-16 7:43 ` Kevin Wolf
2009-07-15 18:14 ` [Qemu-devel] [PATCH] rev3: " Jamie Lokier
2009-07-15 20:54 ` Jan Kiszka
2009-07-15 21:36 ` Jamie Lokier
2009-07-15 21:42 ` Jan Kiszka
2009-07-15 22:00 ` Jamie Lokier
2009-07-15 22:16 ` Anthony Liguori
2009-07-15 22:39 ` Jamie Lokier
2009-07-15 22:41 ` Anthony Liguori
2009-07-15 22:51 ` Jamie Lokier
2009-07-16 0:03 ` Anthony Liguori
2009-07-16 7:20 ` Jan Kiszka
2009-07-16 7:16 ` Jan Kiszka
2009-07-16 8:01 ` Kevin Wolf
2009-07-16 23:53 ` Paul Brook
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1247677395.14246.38.camel@localhost \
--to=linuxram@us.ibm.com \
--cc=aliguori@us.ibm.com \
--cc=jan.kiszka@siemens.com \
--cc=kvm@vger.kernel.org \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).