svn commit: r363190 - stable/11/usr.bin/mkimg
Oleksandr Tymoshenko
gonzo at FreeBSD.org
Tue Jul 14 18:31:16 UTC 2020
Author: gonzo
Date: Tue Jul 14 18:31:15 2020
New Revision: 363190
URL: https://svnweb.freebsd.org/changeset/base/363190
Log:
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.
Modified:
stable/11/usr.bin/mkimg/vhdx.c
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/usr.bin/mkimg/vhdx.c
==============================================================================
--- stable/11/usr.bin/mkimg/vhdx.c Tue Jul 14 18:31:00 2020 (r363189)
+++ stable/11/usr.bin/mkimg/vhdx.c Tue Jul 14 18:31:15 2020 (r363190)
@@ -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;
More information about the svn-src-all
mailing list