From: Kevin Wolf <kwolf@redhat.com>
To: qemu-block@nongnu.org
Cc: kwolf@redhat.com, peter.maydell@linaro.org, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PULL 06/36] block/qcow2-bitmap: Don't take address of fields in packed structs
Date: Mon, 5 Nov 2018 17:37:14 +0100 [thread overview]
Message-ID: <20181105163744.25139-7-kwolf@redhat.com> (raw)
In-Reply-To: <20181105163744.25139-1-kwolf@redhat.com>
From: Peter Maydell <peter.maydell@linaro.org>
Taking the address of a field in a packed struct is a bad idea, because
it might not be actually aligned enough for that pointer type (and
thus cause a crash on dereference on some host architectures). Newer
versions of clang warn about this. Avoid the bug by not using the
"modify in place" byte swapping functions.
There are a few places where the in-place swap function is
used on something other than a packed struct field; we convert
those anyway, for consistency.
This patch was produced with the following spatch script:
@@
expression E;
@@
-be16_to_cpus(&E);
+E = be16_to_cpu(E);
@@
expression E;
@@
-be32_to_cpus(&E);
+E = be32_to_cpu(E);
@@
expression E;
@@
-be64_to_cpus(&E);
+E = be64_to_cpu(E);
@@
expression E;
@@
-cpu_to_be16s(&E);
+E = cpu_to_be16(E);
@@
expression E;
@@
-cpu_to_be32s(&E);
+E = cpu_to_be32(E);
@@
expression E;
@@
-cpu_to_be64s(&E);
+E = cpu_to_be64(E);
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
Tested-by: John Snow <jsnow@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block/qcow2-bitmap.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/block/qcow2-bitmap.c b/block/qcow2-bitmap.c
index b5f1b3563d..accebef4cf 100644
--- a/block/qcow2-bitmap.c
+++ b/block/qcow2-bitmap.c
@@ -118,7 +118,7 @@ static inline void bitmap_table_to_be(uint64_t *bitmap_table, size_t size)
size_t i;
for (i = 0; i < size; ++i) {
- cpu_to_be64s(&bitmap_table[i]);
+ bitmap_table[i] = cpu_to_be64(bitmap_table[i]);
}
}
@@ -231,7 +231,7 @@ static int bitmap_table_load(BlockDriverState *bs, Qcow2BitmapTable *tb,
}
for (i = 0; i < tb->size; ++i) {
- be64_to_cpus(&table[i]);
+ table[i] = be64_to_cpu(table[i]);
ret = check_table_entry(table[i], s->cluster_size);
if (ret < 0) {
goto fail;
@@ -394,20 +394,20 @@ fail:
static inline void bitmap_dir_entry_to_cpu(Qcow2BitmapDirEntry *entry)
{
- be64_to_cpus(&entry->bitmap_table_offset);
- be32_to_cpus(&entry->bitmap_table_size);
- be32_to_cpus(&entry->flags);
- be16_to_cpus(&entry->name_size);
- be32_to_cpus(&entry->extra_data_size);
+ entry->bitmap_table_offset = be64_to_cpu(entry->bitmap_table_offset);
+ entry->bitmap_table_size = be32_to_cpu(entry->bitmap_table_size);
+ entry->flags = be32_to_cpu(entry->flags);
+ entry->name_size = be16_to_cpu(entry->name_size);
+ entry->extra_data_size = be32_to_cpu(entry->extra_data_size);
}
static inline void bitmap_dir_entry_to_be(Qcow2BitmapDirEntry *entry)
{
- cpu_to_be64s(&entry->bitmap_table_offset);
- cpu_to_be32s(&entry->bitmap_table_size);
- cpu_to_be32s(&entry->flags);
- cpu_to_be16s(&entry->name_size);
- cpu_to_be32s(&entry->extra_data_size);
+ entry->bitmap_table_offset = cpu_to_be64(entry->bitmap_table_offset);
+ entry->bitmap_table_size = cpu_to_be32(entry->bitmap_table_size);
+ entry->flags = cpu_to_be32(entry->flags);
+ entry->name_size = cpu_to_be16(entry->name_size);
+ entry->extra_data_size = cpu_to_be32(entry->extra_data_size);
}
static inline int calc_dir_entry_size(size_t name_size, size_t extra_data_size)
--
2.19.1
next prev parent reply other threads:[~2018-11-05 16:38 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-11-05 16:37 [Qemu-devel] [PULL 00/36] Block layer patches Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 01/36] block/vvfat: Fix crash when reporting error about too many files in directory Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 02/36] block: replace "discard" literal with BDRV_OPT_DISCARD macro Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 03/36] qemu-io-cmds: Fix two format strings Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 04/36] block/qcow2: Don't take address of fields in packed structs Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 05/36] block/qcow: " Kevin Wolf
2018-11-05 16:37 ` Kevin Wolf [this message]
2018-11-05 16:37 ` [Qemu-devel] [PULL 07/36] crypto: initialize sector size even when opening with no IO flag Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 08/36] qcow2: Get the request alignment for encrypted images from QCryptoBlock Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 09/36] block: change some function return type to bool Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 10/36] iotests: make 083 specific to raw Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 11/36] vpc: Don't leak opts in vpc_open() Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 12/36] block/vhdx: Don't take address of fields in packed structs Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 13/36] block/vdi: " Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 14/36] quorum: Remove quorum_err() Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 15/36] quorum: Return an error if the blkverify mode has invalid settings Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 16/36] iotest: Test the blkverify mode of the Quorum driver Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 17/36] quorum: Forbid adding children in blkverify mode Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 18/36] iotest: Test x-blockdev-change on a Quorum Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 19/36] block: Update flags in bdrv_set_read_only() Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 20/36] block: Add auto-read-only option Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 21/36] rbd: Close image in qemu_rbd_open() error path Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 22/36] block: Require auto-read-only for existing fallbacks Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 23/36] nbd: Support auto-read-only option Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 24/36] file-posix: " Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 25/36] curl: " Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 26/36] gluster: " Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 27/36] iscsi: " Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 28/36] block: Make auto-read-only=on default for -drive Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 29/36] qemu-iotests: Test auto-read-only with -drive and -blockdev Kevin Wolf
2018-11-15 20:39 ` Eric Blake
2018-11-05 16:37 ` [Qemu-devel] [PULL 30/36] option: Make option help nicer to read Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 31/36] chardev: Indent list of chardevs Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 32/36] qdev-monitor: Make device options help nicer Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 33/36] object: Make option help nicer to read Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 34/36] fw_cfg: Drop newline in @file description Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 35/36] vdi: Use a literal number of bytes for DEFAULT_CLUSTER_SIZE Kevin Wolf
2018-11-05 16:37 ` [Qemu-devel] [PULL 36/36] include: Add a comment to explain the origin of sizes' lookup table Kevin Wolf
2018-11-05 18:58 ` [Qemu-devel] [PULL 00/36] 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=20181105163744.25139-7-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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.