Fix invalid VHDX generation for image larger than 4Gb
- Part of BAT payload location was lost due to invalid BAT entry encoding type (32 bits instead of 64 bits) - The sequence of PB/SB entries in BAT was broken due to off-by-one index check. It worked for smaller than 4Gb because there were no SB entries in BAT. MFC after: 1 day
This commit is contained in:
parent
551d20f044
commit
e331252340
@ -429,7 +429,7 @@ vhdx_write_bat(int fd, uint64_t image_size)
|
||||
payload_offset = 3 + (bat_size / SIZE_1MB);
|
||||
bat_ptr = 0;
|
||||
for (idx = 0; idx < data_block_count; idx++) {
|
||||
le32enc(bat + bat_ptr,
|
||||
le64enc(bat + bat_ptr,
|
||||
BAT_ENTRY(payload_offset, PAYLOAD_BLOCK_FULLY_PRESENT));
|
||||
bat_ptr += 8;
|
||||
payload_offset += (PAYLOAD_BLOCK_SIZE / SIZE_1MB);
|
||||
@ -445,9 +445,9 @@ vhdx_write_bat(int fd, uint64_t image_size)
|
||||
bat_ptr = 0;
|
||||
}
|
||||
|
||||
if ((idx % chunk_ratio) == 0 &&
|
||||
(idx > 0) && (idx != data_block_count - 1)) {
|
||||
le32enc(bat + bat_ptr,
|
||||
if (((idx + 1) % chunk_ratio) == 0 &&
|
||||
(idx != data_block_count - 1)) {
|
||||
le64enc(bat + bat_ptr,
|
||||
BAT_ENTRY(0, SB_BLOCK_NOT_PRESENT));
|
||||
bat_ptr += 8;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user