From: Kevin Wolf <kwolf@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, peter.maydell@linaro.org, qemu-devel@nongnu.org
Subject: [PULL 11/17] block/vpc: Don't abuse the footer buffer for dynamic header
Date: Fri, 18 Dec 2020 13:10:35 +0100 [thread overview]
Message-ID: <20201218121041.299788-12-kwolf@redhat.com> (raw)
In-Reply-To: <20201218121041.299788-1-kwolf@redhat.com>
From: Markus Armbruster <armbru@redhat.com>
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).
Works, because the caller passes a buffer that is large enough for
both purposes. I hate that.
Use a separate buffer for the dynamic header, and adjust the caller's
buffer.
Signed-off-by: Markus Armbruster <armbru@redhat.com>
Message-Id: <20201217162003.1102738-4-armbru@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block/vpc.c | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/block/vpc.c b/block/vpc.c
index d18ecc3da1..34186640ee 100644
--- a/block/vpc.c
+++ b/block/vpc.c
@@ -822,8 +822,9 @@ static int calculate_geometry(int64_t total_sectors, uint16_t *cyls,
static int create_dynamic_disk(BlockBackend *blk, uint8_t *buf,
int64_t total_sectors)
{
+ uint8_t dyndisk_header_buf[1024];
VHDDynDiskHeader *dyndisk_header =
- (VHDDynDiskHeader *) buf;
+ (VHDDynDiskHeader *)dyndisk_header_buf;
uint8_t bat_sector[512];
size_t block_size, num_bat_entries;
int i;
@@ -858,7 +859,7 @@ static int create_dynamic_disk(BlockBackend *blk, uint8_t *buf,
}
/* Prepare the Dynamic Disk Header */
- memset(buf, 0, 1024);
+ memset(dyndisk_header_buf, 0, 1024);
memcpy(dyndisk_header->magic, "cxsparse", 8);
@@ -872,12 +873,13 @@ static int create_dynamic_disk(BlockBackend *blk, uint8_t *buf,
dyndisk_header->block_size = cpu_to_be32(block_size);
dyndisk_header->max_table_entries = cpu_to_be32(num_bat_entries);
- dyndisk_header->checksum = cpu_to_be32(vpc_checksum(buf, 1024));
+ dyndisk_header->checksum = cpu_to_be32(vpc_checksum(dyndisk_header_buf,
+ 1024));
/* Write the header */
offset = 512;
- ret = blk_pwrite(blk, offset, buf, 1024, 0);
+ ret = blk_pwrite(blk, offset, dyndisk_header_buf, 1024, 0);
if (ret < 0) {
goto fail;
}
@@ -972,8 +974,8 @@ static int coroutine_fn vpc_co_create(BlockdevCreateOptions *opts,
BlockBackend *blk = NULL;
BlockDriverState *bs = NULL;
- uint8_t buf[1024];
- VHDFooter *footer = (VHDFooter *) buf;
+ uint8_t footer_buf[HEADER_SIZE];
+ VHDFooter *footer = (VHDFooter *)footer_buf;
uint16_t cyls = 0;
uint8_t heads = 0;
uint8_t secs_per_cyl = 0;
@@ -1036,7 +1038,7 @@ static int coroutine_fn vpc_co_create(BlockdevCreateOptions *opts,
}
/* Prepare the Hard Disk Footer */
- memset(buf, 0, 1024);
+ memset(footer_buf, 0, HEADER_SIZE);
memcpy(footer->creator, "conectix", 8);
if (vpc_opts->force_size) {
@@ -1069,15 +1071,15 @@ static int coroutine_fn vpc_co_create(BlockdevCreateOptions *opts,
qemu_uuid_generate(&uuid);
footer->uuid = uuid;
- footer->checksum = cpu_to_be32(vpc_checksum(buf, HEADER_SIZE));
+ footer->checksum = cpu_to_be32(vpc_checksum(footer_buf, HEADER_SIZE));
if (disk_type == VHD_DYNAMIC) {
- ret = create_dynamic_disk(blk, buf, total_sectors);
+ ret = create_dynamic_disk(blk, footer_buf, total_sectors);
if (ret < 0) {
error_setg(errp, "Unable to create or write VHD header");
}
} else {
- ret = create_fixed_disk(blk, buf, total_size, errp);
+ ret = create_fixed_disk(blk, footer_buf, total_size, errp);
}
out:
--
2.29.2
next prev parent reply other threads:[~2020-12-18 12:20 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-18 12:10 [PULL 00/17] Block layer patches Kevin Wolf
2020-12-18 12:10 ` [PULL 01/17] iotests/210: Fix reference output Kevin Wolf
2020-12-18 12:10 ` [PULL 02/17] hw/block/nand: Decommission the NAND museum Kevin Wolf
2020-12-18 12:10 ` [PULL 03/17] block/nfs: fix int overflow in nfs_client_open_qdict Kevin Wolf
2020-12-18 12:10 ` [PULL 04/17] docs: generate qemu-storage-daemon-qmp-ref(7) man page Kevin Wolf
2020-12-18 12:10 ` [PULL 05/17] docs: add qemu-storage-daemon(1) " Kevin Wolf
2020-12-18 12:10 ` [PULL 06/17] MAINTAINERS: add Kevin Wolf as storage daemon maintainer Kevin Wolf
2020-12-18 12:10 ` [PULL 07/17] iotests: make _filter_qom_path more strict Kevin Wolf
2020-12-18 12:10 ` [PULL 08/17] iotests:172: use _filter_qom_path Kevin Wolf
2020-12-18 12:10 ` [PULL 09/17] block/vpc: Make vpc_open() read the full dynamic header Kevin Wolf
2020-12-18 12:10 ` [PULL 10/17] block/vpc: Don't abuse the footer buffer as BAT sector buffer Kevin Wolf
2020-12-18 12:10 ` Kevin Wolf [this message]
2020-12-18 12:10 ` [PULL 12/17] block/vpc: Make vpc_checksum() take void * Kevin Wolf
2020-12-18 12:10 ` [PULL 13/17] block/vpc: Pad VHDDynDiskHeader, replace uint8_t[] buffers Kevin Wolf
2020-12-18 12:10 ` [PULL 14/17] block/vpc: Use sizeof() instead of 1024 for dynamic header size Kevin Wolf
2020-12-18 12:10 ` [PULL 15/17] block/vpc: Pad VHDFooter, replace uint8_t[] buffers Kevin Wolf
2020-12-18 12:10 ` [PULL 16/17] block/vpc: Pass footer buffers as VHDFooter * instead of uint8_t * Kevin Wolf
2020-12-18 12:10 ` [PULL 17/17] block/vpc: Use sizeof() instead of HEADER_SIZE for footer size Kevin Wolf
2020-12-31 23:26 ` [PULL 00/17] Block layer patches Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201218121041.299788-12-kwolf@redhat.com \
--to=kwolf@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-block@nongnu.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).