Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 14 Jul 2020 18:31:16 +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-11@freebsd.org
Subject:   svn commit: r363190 - stable/11/usr.bin/mkimg
Message-ID:  <202007141831.06EIVGTQ021389@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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;
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202007141831.06EIVGTQ021389>