Error reading VMDK4 with footer instead of header

Bug #907063 reported by bbgordonn
12
This bug affects 2 people
Affects Status Importance Assigned to Milestone
QEMU
Expired
Undecided
Unassigned

Bug Description

VMDK4 files can have a footer in the last block, which is the same datastructure as the header but must be used instead if present. In this case, the gd_offset in the usual header at the beginning of the file is the special flag -1 (VMDK 1.1 spec, page 17, "GD_AT_END
"). qemu-img doesn't know about this flag so it goes on to try to read extents with a bogus l1_table from the wrong location in the file.

I have regression-tested this with various OVAs exported from VSphere/ESXi 3 and 4. Current master and all previous QEMU versions were unable to import any compressed VMDKs with a footer. It now works on all the ones I have.

bb45ded93115ad4303471c9a492579dc36716547 changed the order of gd_offset and rgd_offset in the VMDK4Header struct. Page 8 of the VMDK 1.1 spec from VMWare shows the structure as rgd_ then gd_, while QEMU now has gd_ *before* rgd_offset. I was only able to get VMDK conversion to work by switching the order back to that specified by VMWare and previously used by QEMU. I don't know what VMDK this commit is referring to, so I can't test to see if I've broken it. :(

I will submit this patch to the mailing list if I get a chance, but I'm also uploading it here so I don't lose it.

Revision history for this message
bbgordonn (bbgordonn) wrote :
Revision history for this message
Stefan Hajnoczi (stefanha) wrote : Re: [Qemu-devel] [Bug 907063] [NEW] Error reading VMDK4 with footer instead of header

On Tue, Dec 20, 2011 at 8:53 PM, bbgordonn <email address hidden> wrote:
> Public bug reported:
>
> VMDK4 files can have a footer in the last block, which is the same datastructure as the header but must be used instead if present. In this case, the gd_offset in the usual header at the beginning of the file is the special flag -1 (VMDK 1.1 spec, page 17, "GD_AT_END
> "). qemu-img doesn't know about this flag so it goes on to try to read extents with a bogus l1_table from the wrong location in the file.
>
> I have regression-tested this with various OVAs exported from
> VSphere/ESXi 3 and 4. Current master and all previous QEMU versions were
> unable to import any compressed VMDKs with a footer. It now works on all
> the ones I have.
>
> bb45ded93115ad4303471c9a492579dc36716547 changed the order of gd_offset
> and rgd_offset in the VMDK4Header struct. Page 8 of the VMDK 1.1 spec
> from VMWare shows the structure as rgd_ then gd_, while QEMU now has gd_
> *before* rgd_offset. I was only able to get VMDK conversion to work by
> switching the order back to that specified by VMWare and previously used
> by QEMU. I don't know what VMDK this commit is referring to, so I can't
> test to see if I've broken it. :(
>
> I will submit this patch to the mailing list if I get a chance, but I'm
> also uploading it here so I don't lose it.
>
> ** Affects: qemu
>     Importance: Undecided
>         Status: New
>
> --
> You received this bug notification because you are a member of qemu-
> devel-ml, which is subscribed to QEMU.
> https://bugs.launchpad.net/bugs/907063

Thanks for reporting this. I have CCed Fam who worked on VMDK this summer.

Please submit patches to the mailing list according to the guidelines here:

http://wiki.qemu.org/Contribute/SubmitAPatch

Stefan

Revision history for this message
Thomas Huth (th-huth) wrote :

Looks like something similar has been commited here:
http://git.qemu.org/?p=qemu.git;a=commitdiff;h=65bd155c7356d448ffee7
So is this problem fixed nowadays?

Changed in qemu:
status: New → Incomplete
Revision history for this message
Launchpad Janitor (janitor) wrote :

[Expired for QEMU because there has been no activity for 60 days.]

Changed in qemu:
status: Incomplete → Expired
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.