Skip to content

Commit

Permalink
block/vpc: Don't abuse the footer buffer as BAT sector buffer
Browse files Browse the repository at this point in the history
create_dynamic_disk() takes a buffer holding the footer as first
argument.  It writes out the footer (512 bytes), then reuses the
buffer to initialize and write out the dynamic header (1024 bytes),
then reuses it again to initialize and write out BAT sectors (512).

Works, because the caller passes a buffer that is large enough for all
three purposes.  I hate that.

Use a separate buffer for writing out BAT sectors.  The next commit
will do the same for the dynamic header.

Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20201217162003.1102738-3-armbru@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
  • Loading branch information
Markus Armbruster authored and kevmw committed Dec 18, 2020
1 parent 02df95c commit b0ce8cb
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions block/vpc.c
Expand Up @@ -824,6 +824,7 @@ static int create_dynamic_disk(BlockBackend *blk, uint8_t *buf,
{
VHDDynDiskHeader *dyndisk_header =
(VHDDynDiskHeader *) buf;
uint8_t bat_sector[512];
size_t block_size, num_bat_entries;
int i;
int ret;
Expand All @@ -847,9 +848,9 @@ static int create_dynamic_disk(BlockBackend *blk, uint8_t *buf,
/* Write the initial BAT */
offset = 3 * 512;

memset(buf, 0xFF, 512);
memset(bat_sector, 0xFF, 512);
for (i = 0; i < DIV_ROUND_UP(num_bat_entries * 4, 512); i++) {
ret = blk_pwrite(blk, offset, buf, 512, 0);
ret = blk_pwrite(blk, offset, bat_sector, 512, 0);
if (ret < 0) {
goto fail;
}
Expand Down

0 comments on commit b0ce8cb

Please sign in to comment.