Skip to content
  • Lukas Tschoke's avatar
    8af037fe
    block/vhdx: fix dynamic VHDX BAT corruption · 8af037fe
    Lukas Tschoke authored
    The corruption occurs when a BAT entry aligned to 4096 bytes is changed.
    
    Specifically, the corruption occurs during the creation of the LOG Data
    Descriptor. The incorrect behavior involves copying 4088 bytes from the
    original 4096 bytes aligned offset to `tmp[8..4096]` and then copying
    the new value for the first BAT entry to the beginning `tmp[0..8]`.
    This results in all existing BAT entries inside the 4K region being
    incorrectly moved by 8 bytes and the last entry being lost.
    
    This bug did not cause noticeable corruption when only sequentially
    writing once to an empty dynamic VHDX (e.g.
    using `qemu-img convert -O vhdx -o subformat=dynamic ...`), but it
    still resulted in invalid values for the (unused) Sector Bitmap BAT
    entries.
    
    Importantly, this corruption would only become noticeable after the
    corrupted BAT is re-read from the file.
    
    Resolves: https://gitlab.com/qemu-project/qemu/-/issues/727
    
    
    Cc: qemu-stable@nongnu.org
    Signed-off-by: default avatarLukas Tschoke <lukts330@gmail.com>
    Message-Id: <6cfb6d6b-adc5-7772-c8a5-6bae9a0ad668@gmail.com>
    Reviewed-by: default avatarKevin Wolf <kwolf@redhat.com>
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
    8af037fe
    block/vhdx: fix dynamic VHDX BAT corruption
    Lukas Tschoke authored
    The corruption occurs when a BAT entry aligned to 4096 bytes is changed.
    
    Specifically, the corruption occurs during the creation of the LOG Data
    Descriptor. The incorrect behavior involves copying 4088 bytes from the
    original 4096 bytes aligned offset to `tmp[8..4096]` and then copying
    the new value for the first BAT entry to the beginning `tmp[0..8]`.
    This results in all existing BAT entries inside the 4K region being
    incorrectly moved by 8 bytes and the last entry being lost.
    
    This bug did not cause noticeable corruption when only sequentially
    writing once to an empty dynamic VHDX (e.g.
    using `qemu-img convert -O vhdx -o subformat=dynamic ...`), but it
    still resulted in invalid values for the (unused) Sector Bitmap BAT
    entries.
    
    Importantly, this corruption would only become noticeable after the
    corrupted BAT is re-read from the file.
    
    Resolves: https://gitlab.com/qemu-project/qemu/-/issues/727
    
    
    Cc: qemu-stable@nongnu.org
    Signed-off-by: default avatarLukas Tschoke <lukts330@gmail.com>
    Message-Id: <6cfb6d6b-adc5-7772-c8a5-6bae9a0ad668@gmail.com>
    Reviewed-by: default avatarKevin Wolf <kwolf@redhat.com>
    Signed-off-by: default avatarKevin Wolf <kwolf@redhat.com>
Loading