[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 14/26] block: fix allocation size for dirty bitmap
From: |
Paolo Bonzini |
Subject: |
[Qemu-devel] [PATCH 14/26] block: fix allocation size for dirty bitmap |
Date: |
Thu, 12 Apr 2012 14:01:04 +0200 |
Also reuse elsewhere the new constant for sizeof(unsigned long) * 8.
The dirty bitmap is allocated in bits but declared as unsigned long.
Thus, its memory block is accessed beyond its end unless the image
is a multiple of 64 chunks (i.e. a multiple of 64 MB).
Signed-off-by: Paolo Bonzini <address@hidden>
---
block.c | 12 +++++++-----
1 file changed, 7 insertions(+), 5 deletions(-)
diff --git a/block.c b/block.c
index e84a0a9..9dcfee3 100644
--- a/block.c
+++ b/block.c
@@ -1551,6 +1551,8 @@ int bdrv_read(BlockDriverState *bs, int64_t sector_num,
return bdrv_rw_co(bs, sector_num, buf, nb_sectors, false);
}
+#define BITS_PER_LONG (sizeof(unsigned long) * 8)
+
static void set_dirty_bitmap(BlockDriverState *bs, int64_t sector_num,
int nb_sectors, int dirty)
{
@@ -1561,8 +1563,8 @@ static void set_dirty_bitmap(BlockDriverState *bs,
int64_t sector_num,
end = (sector_num + nb_sectors - 1) / BDRV_SECTORS_PER_DIRTY_CHUNK;
for (; start <= end; start++) {
- idx = start / (sizeof(unsigned long) * 8);
- bit = start % (sizeof(unsigned long) * 8);
+ idx = start / BITS_PER_LONG;
+ bit = start % BITS_PER_LONG;
val = bs->dirty_bitmap[idx];
if (dirty) {
if (!(val & (1UL << bit))) {
@@ -3861,10 +3863,10 @@ void bdrv_set_dirty_tracking(BlockDriverState *bs, int
enable)
if (enable) {
if (!bs->dirty_bitmap) {
bitmap_size = (bdrv_getlength(bs) >> BDRV_SECTOR_BITS) +
- BDRV_SECTORS_PER_DIRTY_CHUNK * 8 - 1;
- bitmap_size /= BDRV_SECTORS_PER_DIRTY_CHUNK * 8;
+ BDRV_SECTORS_PER_DIRTY_CHUNK * BITS_PER_LONG - 1;
+ bitmap_size /= BDRV_SECTORS_PER_DIRTY_CHUNK * BITS_PER_LONG;
- bs->dirty_bitmap = g_malloc0(bitmap_size);
+ bs->dirty_bitmap = g_new0(unsigned long, bitmap_size);
}
} else {
if (bs->dirty_bitmap) {
--
1.7.9.3
- [Qemu-devel] [PATCH 01/26] qemu-io: use main_loop_wait, (continued)
- [Qemu-devel] [PATCH 01/26] qemu-io: use main_loop_wait, Paolo Bonzini, 2012/04/12
- [Qemu-devel] [PATCH 02/26] qemu-tool: map vm_clock to rt_clock, Paolo Bonzini, 2012/04/12
- [Qemu-devel] [PATCH 03/26] posix-aio: merge posix_aio_process_queue and posix_aio_read, Paolo Bonzini, 2012/04/12
- [Qemu-devel] [PATCH 05/26] aio: return "AIO in progress" state from qemu_aio_wait, Paolo Bonzini, 2012/04/12
- [Qemu-devel] [PATCH 04/26] aio: remove process_queue callback and qemu_aio_process_queue, Paolo Bonzini, 2012/04/12
- [Qemu-devel] [PATCH 07/26] block: add the support to drain throttled requests, Paolo Bonzini, 2012/04/12
- [Qemu-devel] [PATCH 08/26] block: add mode argument to blockdev-snapshot-sync, Paolo Bonzini, 2012/04/12
- [Qemu-devel] [PATCH 06/26] aio: simplify qemu_aio_wait, Paolo Bonzini, 2012/04/12
- [Qemu-devel] [PATCH 09/26] block: fail live snapshot if disk has no medium, Paolo Bonzini, 2012/04/12
- [Qemu-devel] [PATCH 10/26] block: fix snapshot on QED, Paolo Bonzini, 2012/04/12
- [Qemu-devel] [PATCH 14/26] block: fix allocation size for dirty bitmap,
Paolo Bonzini <=
- [Qemu-devel] [PATCH 12/26] block: update in-memory backing file and format, Paolo Bonzini, 2012/04/12
- [Qemu-devel] [PATCH 11/26] block: push bdrv_change_backing_file error checking up from drivers, Paolo Bonzini, 2012/04/12
- [Qemu-devel] [PATCH 13/26] block: open backing file as read-only when probing for size, Paolo Bonzini, 2012/04/12
- [Qemu-devel] [PATCH 22/26] stream: do not copy unallocated sectors from the base, Paolo Bonzini, 2012/04/12
- [Qemu-devel] [PATCH 23/26] block: implement is_allocated for raw, Paolo Bonzini, 2012/04/12
- [Qemu-devel] [PATCH 24/26] stream: tweak usage of bdrv_co_is_allocated, Paolo Bonzini, 2012/04/12
- [Qemu-devel] [PATCH 16/26] qemu-io: correctly print non-integer values as decimals, Paolo Bonzini, 2012/04/12
- [Qemu-devel] [PATCH 25/26] stream: move is_allocated_above to block.c, Paolo Bonzini, 2012/04/12
- [Qemu-devel] [PATCH 17/26] qemu-io: fix the alloc command, Paolo Bonzini, 2012/04/12
- [Qemu-devel] [PATCH 15/26] qemu-iotests: strip spaces from qemu-img/qemu-io/qemu command lines, Paolo Bonzini, 2012/04/12