diff options
author | Kevin Wolf <kwolf@redhat.com> | 2012-02-22 12:31:47 +0100 |
---|---|---|
committer | Kevin Wolf <kwolf@redhat.com> | 2012-02-29 12:48:47 +0100 |
commit | fd29b4bbef9f75bba64ad7c4db38babc397a4814 (patch) | |
tree | 59f84404e6f5c3457d476b861b9183c6022c855d /block | |
parent | b6a127a156d5c26ea714493731db35a9491919da (diff) |
qcow2: Fix offset in qcow2_read_extensions
The spec says that the length of extensions is padded to 8 bytes, not
the offset. Currently this is the same because the header size is a
multiple of 8, so this is only about compatibility with future changes
to the header size.
While touching it, move the calculation to a common place instead of
duplicating it for each header extension type.
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>
Diffstat (limited to 'block')
-rw-r--r-- | block/qcow2.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/block/qcow2.c b/block/qcow2.c index dea12c1b2..f68f0e107 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -126,7 +126,6 @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset, #ifdef DEBUG_EXT printf("Qcow2: Got format extension %s\n", bs->backing_format); #endif - offset = ((offset + ext.len + 7) & ~7); break; default: @@ -143,11 +142,11 @@ static int qcow2_read_extensions(BlockDriverState *bs, uint64_t start_offset, if (ret < 0) { return ret; } - - offset = ((offset + ext.len + 7) & ~7); } break; } + + offset += ((ext.len + 7) & ~7); } return 0; |