mirror of
https://github.com/freebsd/freebsd-src.git
synced 2024-12-02 10:42:45 +00:00
MFC r363140:
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.
This commit is contained in:
parent
010cdf86c8
commit
2e904e652a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/stable/11/; revision=363190
@ -430,7 +430,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);
|
||||
@ -446,9 +446,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