From: Don Slutz <dslutz@verizon.com>
To: Evgeny Budilovsky <evgeny.budilovsky@ravellosystems.com>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] allow reading variable size vmdk descriptor files
Date: Thu, 13 Jun 2013 17:15:45 -0400 [thread overview]
Message-ID: <51BA3681.3020003@terremark.com> (raw)
In-Reply-To: <1371020901-12782-1-git-send-email-evgeny.budilovsky@ravellosystems.com>
On 06/12/13 03:08, Evgeny Budilovsky wrote:
> The hard-coded 2k buffer on the stack won't allow reading big descriptor
> files which can be generated when storing big images (For example 500G
> vmdk splitted to 2G chunks).
>
> Signed-off-by: Evgeny Budilovsky <evgeny.budilovsky@ravellosystems.com>
> ---
> block/vmdk.c | 28 +++++++++++++++++++++-------
> 1 file changed, 21 insertions(+), 7 deletions(-)
>
> diff --git a/block/vmdk.c b/block/vmdk.c
> index 608daaf..1bc944b 100644
> --- a/block/vmdk.c
> +++ b/block/vmdk.c
> @@ -719,27 +719,41 @@ static int vmdk_open_desc_file(BlockDriverState *bs, int flags,
> int64_t desc_offset)
> {
> int ret;
> - char buf[2048];
> + char *buf = NULL;
> char ct[128];
> BDRVVmdkState *s = bs->opaque;
> + int64_t size;
>
> - ret = bdrv_pread(bs->file, desc_offset, buf, sizeof(buf));
> + size = bdrv_get_allocated_file_size(bs);
> + if (size < 0) {
> + return -EINVAL;
> + }
> +
While this is right for vmdk splitted to 2G chunks, I think this will
fail for a big enough "monolithicFlat" vmdk where there is only the 1
file (g_malloc() will most likely fail for a 500GB file).
> + buf = g_malloc0(size+1);
> +
> + ret = bdrv_pread(bs->file, desc_offset, buf, size);
> if (ret < 0) {
> - return ret;
> + goto exit;
> }
> - buf[2047] = '\0';
> if (vmdk_parse_description(buf, "createType", ct, sizeof(ct))) {
> - return -EMEDIUMTYPE;
> + ret = -EMEDIUMTYPE;
> + goto exit;
> }
> if (strcmp(ct, "monolithicFlat") &&
> strcmp(ct, "twoGbMaxExtentSparse") &&
> strcmp(ct, "twoGbMaxExtentFlat")) {
> fprintf(stderr,
> "VMDK: Not supported image type \"%s\""".\n", ct);
> - return -ENOTSUP;
> + ret = -ENOTSUP;
> + goto exit;
> }
> s->desc_offset = 0;
> - return vmdk_parse_extents(buf, bs, bs->file->filename);
> + ret = vmdk_parse_extents(buf, bs, bs->file->filename);
> +exit:
> + if (buf) {
> + g_free(buf);
> + }
> + return ret;
> }
>
> static int vmdk_open(BlockDriverState *bs, QDict *options, int flags)
> --
> 1.7.9.5
>
-Don Slutz
next prev parent reply other threads:[~2013-06-13 21:17 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-12 7:08 [Qemu-devel] [PATCH] allow reading variable size vmdk descriptor files Evgeny Budilovsky
2013-06-13 21:15 ` Don Slutz [this message]
2013-06-14 6:41 ` Evgeny Budilovsky
2013-06-25 10:16 ` Don Slutz
-- strict thread matches above, loose matches on Subject: below --
2013-06-12 7:32 Evgeny Budilovsky
2013-06-12 8:04 Evgeny Budilovsky
2013-06-12 10:17 ` Stefan Hajnoczi
2013-06-12 10:38 ` Evgeny Budilovsky
2013-06-12 10:30 ` Kevin Wolf
2013-06-12 10:41 ` Evgeny Budilovsky
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=51BA3681.3020003@terremark.com \
--to=dslutz@verizon.com \
--cc=evgeny.budilovsky@ravellosystems.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.