Date: Tue, 14 Jul 2020 18:31:00 +0000 (UTC) From: Oleksandr Tymoshenko <gonzo@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org Subject: svn commit: r363189 - stable/12/usr.bin/mkimg Message-ID: <202007141831.06EIV0BM020485@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: gonzo Date: Tue Jul 14 18:31:00 2020 New Revision: 363189 URL: https://svnweb.freebsd.org/changeset/base/363189 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/12/usr.bin/mkimg/vhdx.c Directory Properties: stable/12/ (props changed) Modified: stable/12/usr.bin/mkimg/vhdx.c ============================================================================== --- stable/12/usr.bin/mkimg/vhdx.c Tue Jul 14 18:11:05 2020 (r363188) +++ stable/12/usr.bin/mkimg/vhdx.c Tue Jul 14 18:31:00 2020 (r363189) @@ -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;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202007141831.06EIV0BM020485>