From: Ram Pai <linuxram@us.ibm.com>
To: Jan Kiszka <jan.kiszka@siemens.com>
Cc: qemu-devel@nongnu.org, kvm-devel <kvm@vger.kernel.org>,
Anthony Liguori <aliguori@us.ibm.com>,
Kevin Wolf <kwolf@redhat.com>
Subject: 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
>
WARNING: multiple messages have this Message-ID (diff)
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: 119+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-06-24 16:58 [PATCH] support colon in filenames Ram Pai
2009-06-24 17:08 ` Balbir Singh
2009-06-24 17:30 ` Ram Pai
2009-06-24 18:31 ` Balbir Singh
2009-06-24 17:26 ` Amit Shah
2009-06-24 17:27 ` Amit Shah
2009-06-24 17:57 ` Ram Pai
2009-06-24 17:57 ` [Qemu-devel] " Ram Pai
2009-06-25 9:14 ` Kevin Wolf
2009-06-25 9:14 ` [Qemu-devel] " Kevin Wolf
2009-06-25 17:52 ` Ram Pai
2009-06-25 17:52 ` [Qemu-devel] " Ram Pai
2009-06-26 6:53 ` Kevin Wolf
2009-06-26 6:53 ` [Qemu-devel] " Kevin Wolf
2009-06-26 6:38 ` rev1 " Ram Pai
2009-06-26 6:38 ` [Qemu-devel] " Ram Pai
2009-06-26 7:45 ` Kevin Wolf
2009-06-26 7:45 ` [Qemu-devel] " Kevin Wolf
2009-06-27 0:41 ` rev2 " Ram Pai
2009-06-27 0:41 ` [Qemu-devel] " Ram Pai
2009-07-02 5:08 ` [PATCH] rev3: " Ram Pai
2009-07-02 5:08 ` [Qemu-devel] " 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 ` [PATCH] rev4: " Ram Pai
2009-07-08 8:30 ` [Qemu-devel] " Ram Pai
2009-07-08 15:05 ` Jan Kiszka
2009-07-08 15:05 ` [Qemu-devel] " Jan Kiszka
2009-07-10 13:31 ` Anthony Liguori
2009-07-10 13:31 ` [Qemu-devel] " Anthony Liguori
2009-07-15 7:51 ` [PATCH] rev5: " Ram Pai
2009-07-15 7:51 ` [Qemu-devel] " Ram Pai
2009-07-15 9:30 ` Jan Kiszka
2009-07-15 9:30 ` [Qemu-devel] " Jan Kiszka
2009-07-15 17:03 ` Ram Pai [this message]
2009-07-15 17:03 ` Ram Pai
2009-07-15 18:20 ` Jamie Lokier
2009-07-15 18:20 ` Jamie Lokier
2009-07-15 18:44 ` Ram Pai
2009-07-15 18:44 ` Ram Pai
2009-07-15 21:04 ` qcow2 relative paths (was: [PATCH] rev5: support colon in filenames) Jamie Lokier
2009-07-15 21:04 ` [Qemu-devel] " Jamie Lokier
2009-07-15 21:14 ` qcow2 relative paths Jan Kiszka
2009-07-15 21:14 ` [Qemu-devel] " Jan Kiszka
2009-07-16 2:28 ` qcow2 relative paths (was: [PATCH] rev5: support colon in filenames) Ram Pai
2009-07-16 2:28 ` [Qemu-devel] " Ram Pai
2009-07-16 7:38 ` qcow2 relative paths Kevin Wolf
2009-07-16 7:38 ` [Qemu-devel] " Kevin Wolf
2009-07-16 7:51 ` Ram Pai
2009-07-16 7:51 ` [Qemu-devel] " Ram Pai
2009-07-16 7:39 ` [PATCH] rev6: support colon in filenames Ram Pai
2009-07-16 7:39 ` [Qemu-devel] " Ram Pai
2009-07-17 23:17 ` [PATCH] rev7: " Ram Pai
2009-07-17 23:17 ` [Qemu-devel] " Ram Pai
2009-07-21 12:42 ` Kevin Wolf
2009-07-21 12:42 ` [Qemu-devel] " Kevin Wolf
2009-08-06 6:27 ` Ram Pai
2009-08-06 6:27 ` [Qemu-devel] " Ram Pai
2009-08-06 6:47 ` [PATCH] rev8: " Ram Pai
2009-08-06 6:47 ` [Qemu-devel] " Ram Pai
2009-07-15 15:04 ` [Qemu-devel] [PATCH] rev5: " Blue Swirl
2009-07-15 15:04 ` Blue Swirl
2009-07-15 15:14 ` Anthony Liguori
2009-07-15 15:14 ` Anthony Liguori
2009-07-15 15:29 ` Blue Swirl
2009-07-15 15:29 ` Blue Swirl
2009-07-15 15:40 ` Anthony Liguori
2009-07-15 15:40 ` Anthony Liguori
2009-07-15 16:42 ` Kevin Wolf
2009-07-15 16:42 ` Kevin Wolf
2009-07-15 17:47 ` Michael S. Tsirkin
2009-07-15 17:47 ` Michael S. Tsirkin
2009-07-16 10:57 ` Amit Shah
2009-07-16 10:57 ` Amit Shah
2009-07-16 13:43 ` Markus Armbruster
2009-07-16 13:43 ` Markus Armbruster
2009-07-16 14:10 ` Anthony Liguori
2009-07-16 14:10 ` Anthony Liguori
2009-07-16 15:13 ` Gerd Hoffmann
2009-07-16 15:13 ` Gerd Hoffmann
2009-07-16 15:12 ` Gerd Hoffmann
2009-07-16 15:12 ` Gerd Hoffmann
2009-07-15 15:34 ` Kevin Wolf
2009-07-15 15:34 ` Kevin Wolf
2009-07-15 15:41 ` Anthony Liguori
2009-07-15 15:41 ` Anthony Liguori
2009-07-15 15:52 ` Paul Brook
2009-07-15 15:52 ` Paul Brook
2009-07-15 16:03 ` Gerd Hoffmann
2009-07-15 16:03 ` Gerd Hoffmann
2009-07-15 16:08 ` Paul Brook
2009-07-15 16:08 ` Paul Brook
2009-07-16 7:39 ` Ram Pai
2009-07-16 7:39 ` Ram Pai
2009-07-16 7:43 ` Kevin Wolf
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:16 ` Anthony Liguori
2009-07-15 22:39 ` Jamie Lokier
2009-07-15 22:39 ` Jamie Lokier
2009-07-15 22:41 ` Anthony Liguori
2009-07-15 22:41 ` Anthony Liguori
2009-07-15 22:51 ` Jamie Lokier
2009-07-15 22:51 ` Jamie Lokier
2009-07-16 0:03 ` Anthony Liguori
2009-07-16 0:03 ` Anthony Liguori
2009-07-16 7:20 ` Jan Kiszka
2009-07-16 7:20 ` Jan Kiszka
2009-07-16 7:16 ` Jan Kiszka
2009-07-16 7:16 ` Jan Kiszka
2009-07-16 8:01 ` Kevin Wolf
2009-07-16 23:53 ` Paul Brook
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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.