Message ID | 1380524368-3283-1-git-send-email-mreitz@redhat.com |
---|---|
State | New |
Headers | show |
Am 30.09.2013 um 08:59 hat Max Reitz geschrieben: > If an inactive L1 table is loaded from disk, its entries are in big > endian and have to be converted to host byte order before using them. > > Signed-off-by: Max Reitz <mreitz@redhat.com> Reviewed-by: Kevin Wolf <kwolf@redhat.com> Sounds like there's yet a test case missing? (But it requires the runtime options for enabling these checks, obviously) Kevin
On 2013-09-30 10:06, Kevin Wolf wrote: > Am 30.09.2013 um 08:59 hat Max Reitz geschrieben: >> If an inactive L1 table is loaded from disk, its entries are in big >> endian and have to be converted to host byte order before using them. >> >> Signed-off-by: Max Reitz <mreitz@redhat.com> > Reviewed-by: Kevin Wolf <kwolf@redhat.com> > > Sounds like there's yet a test case missing? (But it requires the > runtime options for enabling these checks, obviously) Yes to both. For now, I just couldn't write such a test case. Max
On Mon, Sep 30, 2013 at 08:59:28AM +0200, Max Reitz wrote: > If an inactive L1 table is loaded from disk, its entries are in big > endian and have to be converted to host byte order before using them. > > Signed-off-by: Max Reitz <mreitz@redhat.com> > --- > block/qcow2-refcount.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) Thanks, applied to my block tree: https://github.com/stefanha/qemu/commits/block Stefan
diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c index d2b7064..364eeba 100644 --- a/block/qcow2-refcount.c +++ b/block/qcow2-refcount.c @@ -1733,8 +1733,8 @@ int qcow2_check_metadata_overlap(BlockDriverState *bs, int chk, int64_t offset, } for (j = 0; j < l1_sz; j++) { - if ((l1[j] & L1E_OFFSET_MASK) && - overlaps_with(l1[j] & L1E_OFFSET_MASK, s->cluster_size)) { + uint64_t l2_ofs = be64_to_cpu(l1[j]) & L1E_OFFSET_MASK; + if (l2_ofs && overlaps_with(l2_ofs, s->cluster_size)) { g_free(l1); return QCOW2_OL_INACTIVE_L2; }
If an inactive L1 table is loaded from disk, its entries are in big endian and have to be converted to host byte order before using them. Signed-off-by: Max Reitz <mreitz@redhat.com> --- block/qcow2-refcount.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)