From: Kevin Wolf <kwolf@redhat.com>
To: anthony@codemonkey.ws
Cc: kwolf@redhat.com, qemu-devel@nongnu.org
Subject: [Qemu-devel] [PATCH 07/30] block: fix allocation size for dirty bitmap
Date: Thu, 10 May 2012 13:49:11 +0200 [thread overview]
Message-ID: <1336650574-12835-8-git-send-email-kwolf@redhat.com> (raw)
In-Reply-To: <1336650574-12835-1-git-send-email-kwolf@redhat.com>
From: Paolo Bonzini <pbonzini@redhat.com>
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 <pbonzini@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
---
block.c | 12 +++++++-----
1 files changed, 7 insertions(+), 5 deletions(-)
diff --git a/block.c b/block.c
index 754a422..3db84cd 100644
--- a/block.c
+++ b/block.c
@@ -1584,6 +1584,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)
{
@@ -1594,8 +1596,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))) {
@@ -3900,10 +3902,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.6.5
next prev parent reply other threads:[~2012-05-10 11:49 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-05-10 11:49 [Qemu-devel] [PULL 00/30] Block patches for 1.1 Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 01/30] block: add the support to drain throttled requests Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 02/30] block: add mode argument to blockdev-snapshot-sync Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 03/30] block: fail live snapshot if disk has no medium Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 04/30] block: push bdrv_change_backing_file error checking up from drivers Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 05/30] block: update in-memory backing file and format Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 06/30] block: open backing file as read-only when probing for size Kevin Wolf
2012-05-10 11:49 ` Kevin Wolf [this message]
2012-05-10 11:49 ` [Qemu-devel] [PATCH 08/30] qemu-iotests: strip spaces from qemu-img/qemu-io/qemu command lines Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 09/30] qtest: Add function to send QMP commands Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 10/30] qtest: Add floppy test Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 11/30] block: fix snapshot on QED Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 12/30] block: another bdrv_append fix Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 13/30] block: do not reuse the backing file across bdrv_close/bdrv_open Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 14/30] block: fully delete bs->file when closing Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 15/30] block: add block_job_sleep_ns Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 16/30] block: wait for job callback in block_job_cancel_sync Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 17/30] block: simplify path_is_absolute Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 18/30] block: protect path_has_protocol from filenames with colons Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 19/30] block: move field reset from bdrv_open_common to bdrv_close Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 20/30] qemu-img: make "info" backing file output correct and easier to use Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 21/30] qemu-io: correctly print non-integer values as decimals Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 22/30] qemu-io: fix the alloc command Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 23/30] stream: fix sectors not allocated test Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 24/30] stream: add testcase for partial streaming Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 25/30] stream: pass new base image format to bdrv_change_backing_file Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 26/30] stream: fix HMP block_job_set_speed Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 27/30] stream: fix ratelimiting corner case Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 28/30] stream: do not copy unallocated sectors from the base Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 29/30] tests/Makefile: Add missing $(EXESUF) Kevin Wolf
2012-05-10 11:49 ` [Qemu-devel] [PATCH 30/30] declare ECANCELED on all machines Kevin Wolf
2012-05-14 15:03 ` [Qemu-devel] [PULL 00/30] Block patches for 1.1 Anthony Liguori
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1336650574-12835-8-git-send-email-kwolf@redhat.com \
--to=kwolf@redhat.com \
--cc=anthony@codemonkey.ws \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).