From nobody Mon May 6 17:22:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1512148546796655.2506078320187; Fri, 1 Dec 2017 09:15:46 -0800 (PST) Received: from localhost ([::1]:58872 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eKouW-0005ey-2G for importer@patchew.org; Fri, 01 Dec 2017 12:15:36 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40857) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eKnkq-0005Ia-AN for qemu-devel@nongnu.org; Fri, 01 Dec 2017 11:02:11 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eKnk7-00018i-2y for qemu-devel@nongnu.org; Fri, 01 Dec 2017 11:01:31 -0500 Received: from [195.214.232.25] (port=6314 helo=relay.sw.ru) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eKniL-00068b-H5; Fri, 01 Dec 2017 10:58:57 -0500 Received: from kvm.sw.ru ([195.214.232.6]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id vAUGloPJ014996; Thu, 30 Nov 2017 19:47:51 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org, qemu-block@nongnu.org Date: Thu, 30 Nov 2017 19:47:49 +0300 Message-Id: <20171130164750.47320-2-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20171130164750.47320-1-vsementsov@virtuozzo.com> References: <20171130164750.47320-1-vsementsov@virtuozzo.com> X-detected-operating-system: by eggs.gnu.org: OpenBSD 3.x [fuzzy] X-Received-From: 195.214.232.25 Subject: [Qemu-devel] [PATCH 1/2] qcow2: add overlap check for bitmap directory X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, mreitz@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy --- block/qcow2.h | 7 +++++-- block/qcow2-refcount.c | 12 ++++++++++++ block/qcow2.c | 6 ++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/block/qcow2.h b/block/qcow2.h index 6f0ff15dd0..8f226a3609 100644 --- a/block/qcow2.h +++ b/block/qcow2.h @@ -98,6 +98,7 @@ #define QCOW2_OPT_OVERLAP_SNAPSHOT_TABLE "overlap-check.snapshot-table" #define QCOW2_OPT_OVERLAP_INACTIVE_L1 "overlap-check.inactive-l1" #define QCOW2_OPT_OVERLAP_INACTIVE_L2 "overlap-check.inactive-l2" +#define QCOW2_OPT_OVERLAP_BITMAP_DIRECTORY "overlap-check.bitmap-directory" #define QCOW2_OPT_CACHE_SIZE "cache-size" #define QCOW2_OPT_L2_CACHE_SIZE "l2-cache-size" #define QCOW2_OPT_REFCOUNT_CACHE_SIZE "refcount-cache-size" @@ -406,8 +407,9 @@ typedef enum QCow2MetadataOverlap { QCOW2_OL_SNAPSHOT_TABLE_BITNR =3D 5, QCOW2_OL_INACTIVE_L1_BITNR =3D 6, QCOW2_OL_INACTIVE_L2_BITNR =3D 7, + QCOW2_OL_BITMAP_DIRECTORY_BITNR =3D 8, =20 - QCOW2_OL_MAX_BITNR =3D 8, + QCOW2_OL_MAX_BITNR =3D 9, =20 QCOW2_OL_NONE =3D 0, QCOW2_OL_MAIN_HEADER =3D (1 << QCOW2_OL_MAIN_HEADER_BITNR), @@ -420,12 +422,13 @@ typedef enum QCow2MetadataOverlap { /* NOTE: Checking overlaps with inactive L2 tables will result in bdrv * reads. */ QCOW2_OL_INACTIVE_L2 =3D (1 << QCOW2_OL_INACTIVE_L2_BITNR), + QCOW2_OL_BITMAP_DIRECTORY =3D (1 << QCOW2_OL_BITMAP_DIRECTORY_BITNR), } QCow2MetadataOverlap; =20 /* Perform all overlap checks which can be done in constant time */ #define QCOW2_OL_CONSTANT \ (QCOW2_OL_MAIN_HEADER | QCOW2_OL_ACTIVE_L1 | QCOW2_OL_REFCOUNT_TABLE |= \ - QCOW2_OL_SNAPSHOT_TABLE) + QCOW2_OL_SNAPSHOT_TABLE | QCOW2_OL_BITMAP_DIRECTORY) =20 /* Perform all overlap checks which don't require disk access */ #define QCOW2_OL_CACHED \ diff --git a/block/qcow2-refcount.c b/block/qcow2-refcount.c index 3de1ab51ba..a7a2703f26 100644 --- a/block/qcow2-refcount.c +++ b/block/qcow2-refcount.c @@ -2585,6 +2585,18 @@ int qcow2_check_metadata_overlap(BlockDriverState *b= s, int ign, int64_t offset, } } =20 + if ((chk & QCOW2_OL_BITMAP_DIRECTORY) && + (s->autoclear_features & QCOW2_AUTOCLEAR_BITMAPS)) + { + /* update_ext_header_and_dir_in_place firstly drop autoclear flag, + * so it will not fail */ + if (overlaps_with(s->bitmap_directory_offset, + s->bitmap_directory_size)) + { + return QCOW2_OL_BITMAP_DIRECTORY; + } + } + return 0; } =20 diff --git a/block/qcow2.c b/block/qcow2.c index 1914a940e5..8278c0e124 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -655,6 +655,11 @@ static QemuOptsList qcow2_runtime_opts =3D { .help =3D "Check for unintended writes into an inactive L2 tab= le", }, { + .name =3D QCOW2_OPT_OVERLAP_BITMAP_DIRECTORY, + .type =3D QEMU_OPT_BOOL, + .help =3D "Check for unintended writes into the bitmap directo= ry", + }, + { .name =3D QCOW2_OPT_CACHE_SIZE, .type =3D QEMU_OPT_SIZE, .help =3D "Maximum combined metadata (L2 tables and refcount b= locks) " @@ -690,6 +695,7 @@ static const char *overlap_bool_option_names[QCOW2_OL_M= AX_BITNR] =3D { [QCOW2_OL_SNAPSHOT_TABLE_BITNR] =3D QCOW2_OPT_OVERLAP_SNAPSHOT_TABLE, [QCOW2_OL_INACTIVE_L1_BITNR] =3D QCOW2_OPT_OVERLAP_INACTIVE_L1, [QCOW2_OL_INACTIVE_L2_BITNR] =3D QCOW2_OPT_OVERLAP_INACTIVE_L2, + [QCOW2_OL_BITMAP_DIRECTORY_BITNR] =3D QCOW2_OPT_OVERLAP_BITMAP_DIRECTO= RY, }; =20 static void cache_clean_timer_cb(void *opaque) --=20 2.11.1 From nobody Mon May 6 17:22:54 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 15121473319101019.047106635107; Fri, 1 Dec 2017 08:55:31 -0800 (PST) Received: from localhost ([::1]:58720 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eKoat-0004w8-4S for importer@patchew.org; Fri, 01 Dec 2017 11:55:19 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:40887) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eKnkq-0005JF-WE for qemu-devel@nongnu.org; Fri, 01 Dec 2017 11:02:18 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eKnk7-00018s-2u for qemu-devel@nongnu.org; Fri, 01 Dec 2017 11:01:33 -0500 Received: from [195.214.232.25] (port=6314 helo=relay.sw.ru) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1eKniM-00068b-8b; Fri, 01 Dec 2017 10:58:58 -0500 Received: from kvm.sw.ru ([195.214.232.6]) by relay.sw.ru (8.13.4/8.13.4) with ESMTP id vAUGloPK014996; Thu, 30 Nov 2017 19:47:51 +0300 (MSK) From: Vladimir Sementsov-Ogievskiy To: qemu-devel@nongnu.org, qemu-block@nongnu.org Date: Thu, 30 Nov 2017 19:47:50 +0300 Message-Id: <20171130164750.47320-3-vsementsov@virtuozzo.com> X-Mailer: git-send-email 2.11.1 In-Reply-To: <20171130164750.47320-1-vsementsov@virtuozzo.com> References: <20171130164750.47320-1-vsementsov@virtuozzo.com> X-detected-operating-system: by eggs.gnu.org: OpenBSD 3.x [fuzzy] X-Received-From: 195.214.232.25 Subject: [Qemu-devel] [PATCH 2/2] qcow2: fix indentation after previous patch X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, mreitz@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Vladimir Sementsov-Ogievskiy Reviewed-by: John Snow --- block/qcow2.h | 34 +++++++++++++++++----------------- block/qcow2.c | 16 ++++++++-------- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/block/qcow2.h b/block/qcow2.h index 8f226a3609..896ad08e5b 100644 --- a/block/qcow2.h +++ b/block/qcow2.h @@ -399,29 +399,29 @@ typedef enum QCow2ClusterType { } QCow2ClusterType; =20 typedef enum QCow2MetadataOverlap { - QCOW2_OL_MAIN_HEADER_BITNR =3D 0, - QCOW2_OL_ACTIVE_L1_BITNR =3D 1, - QCOW2_OL_ACTIVE_L2_BITNR =3D 2, - QCOW2_OL_REFCOUNT_TABLE_BITNR =3D 3, - QCOW2_OL_REFCOUNT_BLOCK_BITNR =3D 4, - QCOW2_OL_SNAPSHOT_TABLE_BITNR =3D 5, - QCOW2_OL_INACTIVE_L1_BITNR =3D 6, - QCOW2_OL_INACTIVE_L2_BITNR =3D 7, + QCOW2_OL_MAIN_HEADER_BITNR =3D 0, + QCOW2_OL_ACTIVE_L1_BITNR =3D 1, + QCOW2_OL_ACTIVE_L2_BITNR =3D 2, + QCOW2_OL_REFCOUNT_TABLE_BITNR =3D 3, + QCOW2_OL_REFCOUNT_BLOCK_BITNR =3D 4, + QCOW2_OL_SNAPSHOT_TABLE_BITNR =3D 5, + QCOW2_OL_INACTIVE_L1_BITNR =3D 6, + QCOW2_OL_INACTIVE_L2_BITNR =3D 7, QCOW2_OL_BITMAP_DIRECTORY_BITNR =3D 8, =20 QCOW2_OL_MAX_BITNR =3D 9, =20 - QCOW2_OL_NONE =3D 0, - QCOW2_OL_MAIN_HEADER =3D (1 << QCOW2_OL_MAIN_HEADER_BITNR), - QCOW2_OL_ACTIVE_L1 =3D (1 << QCOW2_OL_ACTIVE_L1_BITNR), - QCOW2_OL_ACTIVE_L2 =3D (1 << QCOW2_OL_ACTIVE_L2_BITNR), - QCOW2_OL_REFCOUNT_TABLE =3D (1 << QCOW2_OL_REFCOUNT_TABLE_BITNR), - QCOW2_OL_REFCOUNT_BLOCK =3D (1 << QCOW2_OL_REFCOUNT_BLOCK_BITNR), - QCOW2_OL_SNAPSHOT_TABLE =3D (1 << QCOW2_OL_SNAPSHOT_TABLE_BITNR), - QCOW2_OL_INACTIVE_L1 =3D (1 << QCOW2_OL_INACTIVE_L1_BITNR), + QCOW2_OL_NONE =3D 0, + QCOW2_OL_MAIN_HEADER =3D (1 << QCOW2_OL_MAIN_HEADER_BITNR), + QCOW2_OL_ACTIVE_L1 =3D (1 << QCOW2_OL_ACTIVE_L1_BITNR), + QCOW2_OL_ACTIVE_L2 =3D (1 << QCOW2_OL_ACTIVE_L2_BITNR), + QCOW2_OL_REFCOUNT_TABLE =3D (1 << QCOW2_OL_REFCOUNT_TABLE_BITNR), + QCOW2_OL_REFCOUNT_BLOCK =3D (1 << QCOW2_OL_REFCOUNT_BLOCK_BITNR), + QCOW2_OL_SNAPSHOT_TABLE =3D (1 << QCOW2_OL_SNAPSHOT_TABLE_BITNR), + QCOW2_OL_INACTIVE_L1 =3D (1 << QCOW2_OL_INACTIVE_L1_BITNR), /* NOTE: Checking overlaps with inactive L2 tables will result in bdrv * reads. */ - QCOW2_OL_INACTIVE_L2 =3D (1 << QCOW2_OL_INACTIVE_L2_BITNR), + QCOW2_OL_INACTIVE_L2 =3D (1 << QCOW2_OL_INACTIVE_L2_BITNR), QCOW2_OL_BITMAP_DIRECTORY =3D (1 << QCOW2_OL_BITMAP_DIRECTORY_BITNR), } QCow2MetadataOverlap; =20 diff --git a/block/qcow2.c b/block/qcow2.c index 8278c0e124..23f36a67c7 100644 --- a/block/qcow2.c +++ b/block/qcow2.c @@ -687,14 +687,14 @@ static QemuOptsList qcow2_runtime_opts =3D { }; =20 static const char *overlap_bool_option_names[QCOW2_OL_MAX_BITNR] =3D { - [QCOW2_OL_MAIN_HEADER_BITNR] =3D QCOW2_OPT_OVERLAP_MAIN_HEADER, - [QCOW2_OL_ACTIVE_L1_BITNR] =3D QCOW2_OPT_OVERLAP_ACTIVE_L1, - [QCOW2_OL_ACTIVE_L2_BITNR] =3D QCOW2_OPT_OVERLAP_ACTIVE_L2, - [QCOW2_OL_REFCOUNT_TABLE_BITNR] =3D QCOW2_OPT_OVERLAP_REFCOUNT_TABLE, - [QCOW2_OL_REFCOUNT_BLOCK_BITNR] =3D QCOW2_OPT_OVERLAP_REFCOUNT_BLOCK, - [QCOW2_OL_SNAPSHOT_TABLE_BITNR] =3D QCOW2_OPT_OVERLAP_SNAPSHOT_TABLE, - [QCOW2_OL_INACTIVE_L1_BITNR] =3D QCOW2_OPT_OVERLAP_INACTIVE_L1, - [QCOW2_OL_INACTIVE_L2_BITNR] =3D QCOW2_OPT_OVERLAP_INACTIVE_L2, + [QCOW2_OL_MAIN_HEADER_BITNR] =3D QCOW2_OPT_OVERLAP_MAIN_HEADER, + [QCOW2_OL_ACTIVE_L1_BITNR] =3D QCOW2_OPT_OVERLAP_ACTIVE_L1, + [QCOW2_OL_ACTIVE_L2_BITNR] =3D QCOW2_OPT_OVERLAP_ACTIVE_L2, + [QCOW2_OL_REFCOUNT_TABLE_BITNR] =3D QCOW2_OPT_OVERLAP_REFCOUNT_TABLE, + [QCOW2_OL_REFCOUNT_BLOCK_BITNR] =3D QCOW2_OPT_OVERLAP_REFCOUNT_BLOCK, + [QCOW2_OL_SNAPSHOT_TABLE_BITNR] =3D QCOW2_OPT_OVERLAP_SNAPSHOT_TABLE, + [QCOW2_OL_INACTIVE_L1_BITNR] =3D QCOW2_OPT_OVERLAP_INACTIVE_L1, + [QCOW2_OL_INACTIVE_L2_BITNR] =3D QCOW2_OPT_OVERLAP_INACTIVE_L2, [QCOW2_OL_BITMAP_DIRECTORY_BITNR] =3D QCOW2_OPT_OVERLAP_BITMAP_DIRECTO= RY, }; =20 --=20 2.11.1