qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
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
> 

  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).