qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Jeff Cody <jcody@redhat.com>
To: Markus Armbruster <armbru@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>,
	Levente Kurusa <lkurusa@redhat.com>, Fam Zheng <famz@redhat.com>,
	Stefan Weil <sw@weilnetz.de>, Andrew Jones <drjones@redhat.com>,
	QEMU Developers <qemu-devel@nongnu.org>,
	Stefan Hajnoczi <stefanha@redhat.com>
Subject: Re: [Qemu-devel] [PATCH 0/3] vpc: support probing of fixed size images
Date: Fri, 15 Aug 2014 08:28:39 -0400	[thread overview]
Message-ID: <20140815122839.GC2399@localhost.localdomain> (raw)
In-Reply-To: <87ioluhuc0.fsf@blackfin.pond.sub.org>

On Fri, Aug 15, 2014 at 01:21:19PM +0200, Markus Armbruster wrote:
> Kevin Wolf <kwolf@redhat.com> writes:
> 
> > Am 14.08.2014 um 16:57 hat Jeff Cody geschrieben:
> >> On Thu, Aug 14, 2014 at 10:42:27AM -0400, Levente Kurusa wrote:
> >> > On Tuesday, 12 August, 2014 3:35:42 PM, Jeff Cody wrote:
> >> > > On Tue, Aug 12, 2014 at 02:20:34PM +0100, Stefan Hajnoczi wrote:
> >> > > > On Fri, Aug 01, 2014 at 03:39:58PM +0200, Levente Kurusa wrote:
> >> > > > > Fixed size VPC images do not have a footer, hence the current probe
> >> > > > > function will fail and QEMU will fall back to the raw_bsd driver, which
> >> > > > > is
> >> > > > > not the correct behaviour. The specification of the format says that
> >> > > > > fixed
> >> > > > > size images have a footer as the last 512 bytes of the file. The footer
> >> > > > > is
> >> > > > > exactly the same as the header would be in the case of dynamically
> >> > > > > growing
> >> > > > > images.
> >> > > > > 
> >> > > > > For this, we need to read the last 512 bytes of the image, however the
> >> > > > > current mechanics predominantly read the first 2048 bytes and pass that
> >> > > > > as a buffer to the probe functions. Solve this by passing the
> >> > > > > BlockDriverState to the probe functions, hence giving them a chance to
> >> > > > > read
> >> > > > > the extra bytes they might need.
> >> > > > 
> >> > > > I hesitate to add patches that extend image format probing.  For the
> >> > > > past few years we have always recommended that image files should not be
> >> > > > probed.
> >> > > > 
> >> > > > Image probing is prone to security issues because a malicious guest can
> >> > > > modify a raw or vpc image by putting another image format header at
> >> > > > sector 0.  The next time QEMU opens the image it will detect a different
> >> > > > format.  One evil trick is to refer to a file on the host file system as
> >> > > > the backing file, now you can read any file that the QEMU process has
> >> > > > access to.
> >> > 
> >> > Yea, good point. The current state of probing is actually quite bad,
> >> > just take a look at dmg_probe in block/dmg.c :-(
> >> > 
> >> > > > 
> >> > > > Probing also complicates live migration.  The source host still has the
> >> > > > image file open and may write to it.  The destination host shouldn't
> >> > > > even read from the image file before handover to avoid file cache
> >> > > > coherency issues.
> >> > > > 
> >> > > > Probing is broken.  It shouldn't be used.  We shouldn't extend it
> >> > > > (especially by adding more I/Os).
> >> > 
> >> > Even though, my series would have only added one extra I/O in the case
> >> > of failing VPC images, I have to admit you are right.
> >> > 
> >> > > 
> >> > > For 2.2, maybe we should limit probing to only certain operations (e.g.
> >> > > qemu-img info) - or perhaps just remove the capability altogether, or
> >> > > at least start phasing it out with a warning message that automatic
> >> > > format detection is deprecated and may be unsafe.
> >> > > 
> >> > 
> >> > Considering the fact that most open functions already check the magic
> >> > numbers, and they do a lot better/safer job at it, we could just swap
> >> > the probe functions with the open ones and just insert an fprintf
> >> > when format is not specified doing what Jeff suggested.
> >> > 
> >> > Any objections to this?
> >> > 
> >> > (This would also solve the VPC-fixed-size bug, since vpc_open already
> >> > checks the footer if the header is not found)
> >> >
> >> 
> >> I was proposing actually going a bit further than this, and not
> >> allowing automatic format detection at all, with an exception for
> >> 'qemu-img info'. In the interim, until that is in place and it is
> >> removed, warn with a deprecation message.
> >
> > No, we can't do this. It would immediately destroy -hda and similar
> > convenience options and make the command line really hard to use even
> > for simple cases. I usually call qemu manually and I specify format
> > basically _never_, because it would like double the length of my command
> > line (okay, not quite, but my command lines are usually very short) and
> > I know what I'm doing and I'm running trusted guests.
> >
> > Plus, there are probably many scripts out there that rely on it.
> >
> > A more reasonable approach would be to just forbid probing raw and
> > raw-like formats like VHD fixed (the rest should be safe), but I think
> > the impact of this would still be too bad.
> 
> I think we're doing our users a disservice by sticking to the fatally
> flawed probing.  "Broken by default" is just wrong, and "convenience" is
> no excuse.
> 
> I believe we can retain 90% of the convenience without the flaws, by
> defaulting format based on file meta-data only: name and struct stat.

I worry that will subtly alter current behavior in bad ways.  For
instance, take this image chain:

    qemu-img create -f qcow2 foo.img 1G
    qemu-img create -f qcow2 -b foo.img bar.img 1G

    qemu-kvm -drive file=bar.img,format=qcow2


If I understand correctly what you are proposing, that means that
qemu-kvm would detect 'foo.img' as raw, while current behavior is to
detect it as 'qcow2'.

Although if we do that in conjunction with what Kevin proposed (forbid
probing on raw), it would behave 'properly', and bail out before doing
something bad.  That could be OK.

> 
> This breaks down for things like QCOW2-formatted logical volumes.  But
> those things are exactly *not* the things casual users need.
> 
> It also breaks down when users call their QCOW2 images foo.vmdk, but I'd
> call that a feature :)

  reply	other threads:[~2014-08-15 12:28 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-08-01 13:39 [Qemu-devel] [PATCH 0/3] vpc: support probing of fixed size images Levente Kurusa
2014-08-01 13:39 ` [Qemu-devel] [PATCH 1/3] block: format: pass down the current state to the format's probe function Levente Kurusa
2014-08-01 13:40 ` [Qemu-devel] [PATCH 2/3] block: vpc: introduce vpc_check_signature function Levente Kurusa
2014-08-01 13:40 ` [Qemu-devel] [PATCH 3/3] block: vpc: handle fixed size images in probe function Levente Kurusa
2014-08-12 13:20 ` [Qemu-devel] [PATCH 0/3] vpc: support probing of fixed size images Stefan Hajnoczi
2014-08-12 13:35   ` Jeff Cody
2014-08-14 14:42     ` Levente Kurusa
2014-08-14 14:57       ` Jeff Cody
2014-08-15 10:55         ` Kevin Wolf
2014-08-15 11:21           ` Markus Armbruster
2014-08-15 12:28             ` Jeff Cody [this message]
2014-08-15 12:59               ` Markus Armbruster
2014-08-15 13:13               ` Eric Blake
2014-08-15 13:25                 ` Jeff Cody
2014-08-15 12:14           ` Jeff Cody
2014-08-15 13:19             ` Eric Blake
2014-08-15 13:37             ` Kevin Wolf
2014-08-15 13:52               ` Jeff Cody
2014-08-15 14:00               ` Eric Blake
2014-08-15 14:10                 ` Jeff Cody
2014-08-15 14:22                   ` Eric Blake
2014-08-15 14:51                     ` Jeff Cody
2014-08-15 14:42                 ` Kevin Wolf

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=20140815122839.GC2399@localhost.localdomain \
    --to=jcody@redhat.com \
    --cc=armbru@redhat.com \
    --cc=drjones@redhat.com \
    --cc=famz@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=lkurusa@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    --cc=sw@weilnetz.de \
    /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).