From: Kevin Wolf <kwolf@redhat.com>
To: "Serge E. Hallyn" <serge@hallyn.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 1/1] block/vpc.c: Detect too-large vpc file
Date: Tue, 26 Jul 2011 11:01:09 +0200 [thread overview]
Message-ID: <4E2E8255.8010908@redhat.com> (raw)
In-Reply-To: <20110725183435.GA26649@hallyn.com>
Am 25.07.2011 20:34, schrieb Serge E. Hallyn:
> VHD files technically can be up to 2Tb, but virtual pc is limited
> to 127G. Currently qemu-img refused to create vpc files > 127G,
> but it is failing to return error when converting from a non-vpc
> VHD file which is >127G. It returns success, but creates a truncated
> converted image. Also, qemu-img info claims the vpc file is 127G
> (and clean).
>
> This patch detects a too-large vpc file and returns -EFBIG. Without
> this patch,
>
> =============================================================
> root@ip-10-38-123-242:~/qemu-fixed# qemu-img info /mnt/140g-dynamic.vhd
> image: /mnt/140g-dynamic.vhd
> file format: vpc
> virtual size: 127G (136899993600 bytes)
> disk size: 284K
> root@ip-10-38-123-242:~/qemu-fixed# qemu-img convert -f vpc -O raw /mnt/140g-dynamic.vhd /mnt/y
> root@ip-10-38-123-242:~/qemu-fixed# echo $?
> 0
> root@ip-10-38-123-242:~/qemu-fixed# qemu-img info /mnt/y
> image: /mnt/y
> file format: raw
> virtual size: 127G (136899993600 bytes)
> disk size: 0
> =============================================================
>
> (The 140G image was truncated with no warning or error.)
>
> With the patch, I get:
>
> =============================================================
> root@ip-10-38-123-242:~/qemu-fixed# ./qemu-img info /mnt/140g-dynamic.vhd
> qemu-img: Could not open '/mnt/140g-dynamic.vhd': File too large
> root@ip-10-38-123-242:~/qemu-fixed# ./qemu-img convert -f vpc -O raw /mnt/140g-dynamic.vhd /mnt/y
> qemu-img: Could not open '/mnt/140g-dynamic.vhd': File too large
> qemu-img: Could not open '/mnt/140g-dynamic.vhd'
> =============================================================
>
> See https://bugs.launchpad.net/qemu/+bug/814222 for details.
>
> Signed-off-by: Serge Hallyn <serge.hallyn@canonical.com>
> ---
> block/vpc.c | 8 +++++++-
> 1 files changed, 7 insertions(+), 1 deletions(-)
>
> diff --git a/block/vpc.c b/block/vpc.c
> index 56865da..fdd5236 100644
> --- a/block/vpc.c
> +++ b/block/vpc.c
> @@ -156,6 +156,7 @@ static int vpc_open(BlockDriverState *bs, int flags)
> struct vhd_dyndisk_header* dyndisk_header;
> uint8_t buf[HEADER_SIZE];
> uint32_t checksum;
> + int err = -1;
>
> if (bdrv_pread(bs->file, 0, s->footer_buf, HEADER_SIZE) != HEADER_SIZE)
> goto fail;
> @@ -176,6 +177,11 @@ static int vpc_open(BlockDriverState *bs, int flags)
> bs->total_sectors = (int64_t)
> be16_to_cpu(footer->cyls) * footer->heads * footer->secs_per_cyl;
>
> + if (bs->total_sectors >= 65535 * 16 * 255) {
> + err = -EFBIG;
> + goto fail;
> + }
I wonder why this works. If bs->total_sectors was right, shouldn't it
have converted the full 140 GB? I can't see where else we would limit it
to 127 GB, so what I had expected is that the CHS geometry stored in the
image header is already too small.
What is the CHS geometry of this 140 GB image?
Kevin
next prev parent reply other threads:[~2011-07-26 8:58 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-25 18:34 [Qemu-devel] [PATCH 1/1] block/vpc.c: Detect too-large vpc file Serge E. Hallyn
2011-07-26 9:01 ` Kevin Wolf [this message]
2011-07-26 16:08 ` Serge E. Hallyn
2011-07-26 16:20 ` Kevin Wolf
2011-07-26 20:26 ` Serge E. Hallyn
2011-07-27 8:45 ` Kevin Wolf
2011-07-27 15:16 ` Serge E. Hallyn
2011-07-27 8:51 ` 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=4E2E8255.8010908@redhat.com \
--to=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
--cc=serge@hallyn.com \
/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).