qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH] block migraton: check sectors before shift operatio


From: Yoshiaki Tamura
Subject: [Qemu-devel] [PATCH] block migraton: check sectors before shift operation.
Date: Mon, 19 Jul 2010 13:45:42 +0900

Commit d246673dcb9911218ff555bcdf28b250e38fa46c has expanded the types
of block drive that can be initialized for block migration.  Although
bdrv_getlength() may return < 0, current code shifts it without
checking.  This makes block migration initialization invalid and
results in abort() due to calling qemu_malloc() with 0 size at
bdrv_set_dirty_tracking().  This patch checks the return value of
bdrv_getlength() by masking with BDRV_SECTOR_MASK.

Signed-off-by: Yoshiaki Tamura <address@hidden>
---
 block-migration.c |    5 +++--
 1 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/block-migration.c b/block-migration.c
index 7db6f02..2e02a4a 100644
--- a/block-migration.c
+++ b/block-migration.c
@@ -237,10 +237,11 @@ static void init_blk_migration_it(void *opaque, 
BlockDriverState *bs)
     int64_t sectors;
 
     if (!bdrv_is_read_only(bs)) {
-        sectors = bdrv_getlength(bs) >> BDRV_SECTOR_BITS;
-        if (sectors == 0) {
+        sectors = bdrv_getlength(bs) & BDRV_SECTOR_MASK;
+        if (sectors <= 0) {
             return;
         }
+        sectors >>= BDRV_SECTOR_BITS;
 
         bmds = qemu_mallocz(sizeof(BlkMigDevState));
         bmds->bs = bs;
-- 
1.7.1.1




reply via email to

[Prev in Thread] Current Thread [Next in Thread]