• J
    block: vhdx - account for identical header sections · 69060461
    Jeff Cody 提交于
    The VHDX spec v1.00 declares that "a header is current if it is the only
    valid header or if it is valid and its SequenceNumber field is greater
    than the other header’s SequenceNumber field. The parser must only use
    data from the current header. If there is no current header, then the
    VHDX file is corrupt."
    
    However, the Disk2VHD tool from Microsoft creates a VHDX image file that
    has 2 identical headers, including matching checksums and matching
    sequence numbers.  Likely, as a shortcut the tool is just writing the
    header twice, for the active and inactive headers, during the image
    creation.  Technically, this should be considered a corrupt VHDX file
    (at least per the 1.00 spec, and that is how we currently treat it).
    
    But in order to accomodate images created with Disk2VHD, we can safely
    create an exception for this case.  If we find identical sequence
    numbers, then we check the VHDXHeader-sized chunks of each 64KB header
    sections (we won't rely just on the crc32c to indicate the headers are
    the same).  If they are identical, then we go ahead and use the first
    one.
    Reported-by: NNerijus Baliūnas <nerijus@users.sourceforge.net>
    Signed-off-by: NJeff Cody <jcody@redhat.com>
    Signed-off-by: NKevin Wolf <kwolf@redhat.com>
    69060461
vhdx.c 63.2 KB