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