qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH] qcow2: avoid misaligned 64bit bswap
@ 2015-11-02 23:32 John Snow
  2015-11-02 23:46 ` Eric Blake
  0 siblings, 1 reply; 3+ messages in thread
From: John Snow @ 2015-11-02 23:32 UTC (permalink / raw)
  To: qemu-block; +Cc: kwolf, John Snow, qemu-devel, mreitz

If we create a buffer directly on the stack by using 12 bytes, there's
no guarantee the 64bit value we want to swap will be aligned, which
could cause errors with undefined behavior.

Spotted with clang -fsanitize=undefined and observed in iotests 15, 26,
44, 115 and 121.

Signed-off-by: John Snow <jsnow@redhat.com>
---
 block/qcow2-refcount.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c
index 4b81c8d..6e0e5bd 100644
--- a/block/qcow2-refcount.c
+++ b/block/qcow2-refcount.c
@@ -560,13 +560,16 @@ static int alloc_refcount_block(BlockDriverState *bs,
     }
 
     /* Hook up the new refcount table in the qcow2 header */
-    uint8_t data[12];
-    cpu_to_be64w((uint64_t*)data, table_offset);
-    cpu_to_be32w((uint32_t*)(data + 8), table_clusters);
+    struct QEMU_PACKED {
+        uint64_t d64;
+        uint32_t d32;
+    } data;
+    cpu_to_be64w(&data.d64, table_offset);
+    cpu_to_be32w(&data.d32, table_clusters);
     BLKDBG_EVENT(bs->file, BLKDBG_REFBLOCK_ALLOC_SWITCH_TABLE);
     ret = bdrv_pwrite_sync(bs->file->bs,
                            offsetof(QCowHeader, refcount_table_offset),
-                           data, sizeof(data));
+                           &data, sizeof(data));
     if (ret < 0) {
         goto fail_table;
     }
-- 
2.4.3

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PATCH] qcow2: avoid misaligned 64bit bswap
  2015-11-02 23:32 [Qemu-devel] [PATCH] qcow2: avoid misaligned 64bit bswap John Snow
@ 2015-11-02 23:46 ` Eric Blake
  2015-11-04 11:08   ` Kevin Wolf
  0 siblings, 1 reply; 3+ messages in thread
From: Eric Blake @ 2015-11-02 23:46 UTC (permalink / raw)
  To: John Snow, qemu-block; +Cc: kwolf, qemu-devel, mreitz

[-- Attachment #1: Type: text/plain, Size: 645 bytes --]

On 11/02/2015 04:32 PM, John Snow wrote:
> If we create a buffer directly on the stack by using 12 bytes, there's
> no guarantee the 64bit value we want to swap will be aligned, which
> could cause errors with undefined behavior.
> 
> Spotted with clang -fsanitize=undefined and observed in iotests 15, 26,
> 44, 115 and 121.
> 
> Signed-off-by: John Snow <jsnow@redhat.com>
> ---
>  block/qcow2-refcount.c | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org


[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 604 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [Qemu-devel] [PATCH] qcow2: avoid misaligned 64bit bswap
  2015-11-02 23:46 ` Eric Blake
@ 2015-11-04 11:08   ` Kevin Wolf
  0 siblings, 0 replies; 3+ messages in thread
From: Kevin Wolf @ 2015-11-04 11:08 UTC (permalink / raw)
  To: Eric Blake; +Cc: John Snow, qemu-devel, qemu-block, mreitz

[-- Attachment #1: Type: text/plain, Size: 663 bytes --]

Am 03.11.2015 um 00:46 hat Eric Blake geschrieben:
> On 11/02/2015 04:32 PM, John Snow wrote:
> > If we create a buffer directly on the stack by using 12 bytes, there's
> > no guarantee the 64bit value we want to swap will be aligned, which
> > could cause errors with undefined behavior.
> > 
> > Spotted with clang -fsanitize=undefined and observed in iotests 15, 26,
> > 44, 115 and 121.
> > 
> > Signed-off-by: John Snow <jsnow@redhat.com>
> > ---
> >  block/qcow2-refcount.c | 11 +++++++----
> >  1 file changed, 7 insertions(+), 4 deletions(-)
> 
> Reviewed-by: Eric Blake <eblake@redhat.com>

Thanks, applied to the block branch.

Kevin

[-- Attachment #2: Type: application/pgp-signature, Size: 836 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2015-11-04 11:08 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-11-02 23:32 [Qemu-devel] [PATCH] qcow2: avoid misaligned 64bit bswap John Snow
2015-11-02 23:46 ` Eric Blake
2015-11-04 11:08   ` Kevin Wolf

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).