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;
 
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to