From nobody Fri May 3 10:51:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.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 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1567791264; cv=none; d=zoho.com; s=zohoarc; b=VTTp5Guwk6y9OesV6GAJpCC2mp9OLiIn3c/zUSs37+1puB1oW3KHkkgGalGUHuaYnvZLuORXNUXarpq8kHU7yZf4EFmTbYX7T7RXQ/Z6i3LAiKOIIUZAPeg0/xQp3IsR9XAewyPc4Wh7E+8PX/3P3JlWCGUgQo1L641bHgbe1mg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1567791264; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=pWYY/S3DepYl7ZJaroTU6BwTpWTIUKU/nnpXCFWCevg=; b=kjLkzuXmeiee+oZaKoVDWf7yN4jlUEjguLOlbzoZxz9sE6TWLdaLV3z0TBm5VmWtoXTcZLmk+p89GFAQstS2hzNMeyxMasHTy2ilxSegWAf1UFSBiZQhn56Tce35QfZmPy9crrkBTka4OfpAkERXEFx1Lh20PC/PIky2nNXYLBI= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (209.51.188.17 [209.51.188.17]) by mx.zohomail.com with SMTPS id 156779126478615.828263378858537; Fri, 6 Sep 2019 10:34:24 -0700 (PDT) Received: from localhost ([::1]:58940 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i6I7m-0005ll-BT for importer@patchew.org; Fri, 06 Sep 2019 13:34:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46332) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i6I5y-0003n1-Kh for qemu-devel@nongnu.org; Fri, 06 Sep 2019 13:32:28 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i6I5v-0003AJ-Vg for qemu-devel@nongnu.org; Fri, 06 Sep 2019 13:32:25 -0400 Received: from mx1.redhat.com ([209.132.183.28]:55990) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i6I5l-0002yT-Tf; Fri, 06 Sep 2019 13:32:16 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 893AC8980EE; Fri, 6 Sep 2019 17:32:08 +0000 (UTC) Received: from maximlenovopc.usersys.redhat.com (unknown [10.35.206.83]) by smtp.corp.redhat.com (Postfix) with ESMTP id 449D95D9CA; Fri, 6 Sep 2019 17:32:06 +0000 (UTC) From: Maxim Levitsky To: qemu-devel@nongnu.org Date: Fri, 6 Sep 2019 20:31:59 +0300 Message-Id: <20190906173201.7926-2-mlevitsk@redhat.com> In-Reply-To: <20190906173201.7926-1-mlevitsk@redhat.com> References: <20190906173201.7926-1-mlevitsk@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.6.2 (mx1.redhat.com [10.5.110.67]); Fri, 06 Sep 2019 17:32:08 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 1/3] block/qcow2: refactoring of threaded encryption code X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Vladimir Sementsov-Ogievskiy , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , qemu-block@nongnu.org, qemu-stable , Maxim Levitsky , Max Reitz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This commit tries to clarify few function arguments, and add comments describing the encrypt/decrypt interface Signed-off-by: Maxim Levitsky --- block/qcow2-cluster.c | 8 +++---- block/qcow2-threads.c | 53 ++++++++++++++++++++++++++++++++++--------- 2 files changed, 46 insertions(+), 15 deletions(-) diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c index f09cc992af..b95e64c237 100644 --- a/block/qcow2-cluster.c +++ b/block/qcow2-cluster.c @@ -463,8 +463,8 @@ static int coroutine_fn do_perform_cow_read(BlockDriver= State *bs, } =20 static bool coroutine_fn do_perform_cow_encrypt(BlockDriverState *bs, - uint64_t src_cluster_offse= t, - uint64_t cluster_offset, + uint64_t guest_cluster_off= set, + uint64_t host_cluster_offs= et, unsigned offset_in_cluster, uint8_t *buffer, unsigned bytes) @@ -474,8 +474,8 @@ static bool coroutine_fn do_perform_cow_encrypt(BlockDr= iverState *bs, assert((offset_in_cluster & ~BDRV_SECTOR_MASK) =3D=3D 0); assert((bytes & ~BDRV_SECTOR_MASK) =3D=3D 0); assert(s->crypto); - if (qcow2_co_encrypt(bs, cluster_offset, - src_cluster_offset + offset_in_cluster, + if (qcow2_co_encrypt(bs, host_cluster_offset, + guest_cluster_offset + offset_in_cluster, buffer, bytes) < 0) { return false; } diff --git a/block/qcow2-threads.c b/block/qcow2-threads.c index 3b1e63fe41..8bc339690f 100644 --- a/block/qcow2-threads.c +++ b/block/qcow2-threads.c @@ -234,15 +234,19 @@ static int qcow2_encdec_pool_func(void *opaque) } =20 static int coroutine_fn -qcow2_co_encdec(BlockDriverState *bs, uint64_t file_cluster_offset, - uint64_t offset, void *buf, size_t len, Qcow2EncDecFunc = func) +qcow2_co_encdec(BlockDriverState *bs, uint64_t host_cluster_offset, + uint64_t guest_offset, void *buf, size_t len, + Qcow2EncDecFunc func) { BDRVQcow2State *s =3D bs->opaque; + + uint64_t offset =3D s->crypt_physical_offset ? + host_cluster_offset + offset_into_cluster(s, guest_offset) : + guest_offset; + Qcow2EncDecData arg =3D { .block =3D s->crypto, - .offset =3D s->crypt_physical_offset ? - file_cluster_offset + offset_into_cluster(s, offset)= : - offset, + .offset =3D offset, .buf =3D buf, .len =3D len, .func =3D func, @@ -251,18 +255,45 @@ qcow2_co_encdec(BlockDriverState *bs, uint64_t file_c= luster_offset, return qcow2_co_process(bs, qcow2_encdec_pool_func, &arg); } =20 + +/* + * qcow2_co_encrypt() + * + * Encrypts a sector size aligned contiguous area + * + * @host_cluster_offset - on disk offset of the cluster in which + * the buffer resides + * + * @guest_offset - guest (virtual) offset of the buffer + * @buf - buffer with the data to encrypt + * @len - length of the buffer + * + * Note that the area is not cluster aligned and might cross a cluster + * boundary + * + * + */ int coroutine_fn -qcow2_co_encrypt(BlockDriverState *bs, uint64_t file_cluster_offset, - uint64_t offset, void *buf, size_t len) +qcow2_co_encrypt(BlockDriverState *bs, uint64_t host_cluster_offset, + uint64_t guest_offset, void *buf, size_t len) { - return qcow2_co_encdec(bs, file_cluster_offset, offset, buf, len, + return qcow2_co_encdec(bs, host_cluster_offset, guest_offset, buf, len, qcrypto_block_encrypt); } =20 + +/* + * qcow2_co_decrypt() + * + * Decrypts a sector size aligned contiguous area + * Same function as qcow2_co_encrypt + * + */ + int coroutine_fn -qcow2_co_decrypt(BlockDriverState *bs, uint64_t file_cluster_offset, - uint64_t offset, void *buf, size_t len) +qcow2_co_decrypt(BlockDriverState *bs, uint64_t host_cluster_offset, + uint64_t guest_offset, void *buf, size_t len) { - return qcow2_co_encdec(bs, file_cluster_offset, offset, buf, len, + return qcow2_co_encdec(bs, host_cluster_offset, guest_offset, buf, len, qcrypto_block_decrypt); } --=20 2.17.2 From nobody Fri May 3 10:51:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.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 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1567791357; cv=none; d=zoho.com; s=zohoarc; b=BO1kCNf/Zrz6hzeYWVUX5+CmLa4gnTQ6UVTHyKhwja9hcbbi4kSXhIrRbQi7uQelYjW2YP8JvulEgKQm2+b/uI5P+PPn3sxwYVDIHDBCW7SXEiIW4vYnsjniBNxuYwoTGjM6I3U/uepLErGNGbUeoRmRE5VH4j5G6cMd8c6joxY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1567791357; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=zk6Yjsj7ed8X7yX0RyIEEqLQ05/AqPkpOaXXwD58hfg=; b=M8U9OjXTCMbg2GFHP9k1NjrZ2yXXnESZsuXs2UJytPHaqNhFpHrzlzZwZR5RZkk1ae0DbmDYgO8ezQjlOIeUZV/qfDakwLT8w/5ExaxXaNSdU7aFa6TdtT9LKAXW107p9fizwF+xikbniF4OecBGQC6buo5LvnHRX7TitTlPF4o= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 156779135795469.08728900069252; Fri, 6 Sep 2019 10:35:57 -0700 (PDT) Received: from localhost ([::1]:58964 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i6I9M-00084d-Rl for importer@patchew.org; Fri, 06 Sep 2019 13:35:56 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46370) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i6I60-0003qI-SW for qemu-devel@nongnu.org; Fri, 06 Sep 2019 13:32:30 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i6I5y-0003D2-QI for qemu-devel@nongnu.org; Fri, 06 Sep 2019 13:32:28 -0400 Received: from mx1.redhat.com ([209.132.183.28]:38754) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i6I5q-00033u-04; Fri, 06 Sep 2019 13:32:19 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 49A45189DACE; Fri, 6 Sep 2019 17:32:14 +0000 (UTC) Received: from maximlenovopc.usersys.redhat.com (unknown [10.35.206.83]) by smtp.corp.redhat.com (Postfix) with ESMTP id EA13A5D9CA; Fri, 6 Sep 2019 17:32:08 +0000 (UTC) From: Maxim Levitsky To: qemu-devel@nongnu.org Date: Fri, 6 Sep 2019 20:32:00 +0300 Message-Id: <20190906173201.7926-3-mlevitsk@redhat.com> In-Reply-To: <20190906173201.7926-1-mlevitsk@redhat.com> References: <20190906173201.7926-1-mlevitsk@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.6.2 (mx1.redhat.com [10.5.110.63]); Fri, 06 Sep 2019 17:32:14 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 2/3] block/qcow2: fix the corruption when rebasing luks encrypted files X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Vladimir Sementsov-Ogievskiy , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , qemu-block@nongnu.org, qemu-stable , Maxim Levitsky , Max Reitz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" This fixes subltle corruption introduced by luks threaded encryption in commit 8ac0f15f335 Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=3D1745922 The corruption happens when we do * write to two or more unallocated clusters at once * write doesn't fully cover nether first nor last cluster In this case, when allocating the new clusters we COW both area prior to the write and after the write, and we encrypt them. The above mentioned commit accidently made it so, we encrypt the second COW are using the physical cluster offset of the first area. Fix this by: * remove the offset_in_cluster parameter of do_perform_cow_encrypt since it is misleading. That offset can be larger that cluster size. instead just add the start and end COW are offsets to both host and gues= t offsets that do_perform_cow_encrypt receives. * in do_perform_cow_encrypt, remove the cluster offset from the host_offset And thus pass correctly to the qcow2_co_encrypt, the host cluster offset= and full guest offset Signed-off-by: Maxim Levitsky --- block/qcow2-cluster.c | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/block/qcow2-cluster.c b/block/qcow2-cluster.c index b95e64c237..32477f0156 100644 --- a/block/qcow2-cluster.c +++ b/block/qcow2-cluster.c @@ -463,20 +463,20 @@ static int coroutine_fn do_perform_cow_read(BlockDriv= erState *bs, } =20 static bool coroutine_fn do_perform_cow_encrypt(BlockDriverState *bs, - uint64_t guest_cluster_off= set, - uint64_t host_cluster_offs= et, - unsigned offset_in_cluster, + uint64_t guest_offset, + uint64_t host_offset, uint8_t *buffer, unsigned bytes) { if (bytes && bs->encrypted) { BDRVQcow2State *s =3D bs->opaque; - assert((offset_in_cluster & ~BDRV_SECTOR_MASK) =3D=3D 0); + assert((guest_offset & ~BDRV_SECTOR_MASK) =3D=3D 0); + assert((host_offset & ~BDRV_SECTOR_MASK) =3D=3D 0); assert((bytes & ~BDRV_SECTOR_MASK) =3D=3D 0); assert(s->crypto); - if (qcow2_co_encrypt(bs, host_cluster_offset, - guest_cluster_offset + offset_in_cluster, - buffer, bytes) < 0) { + + if (qcow2_co_encrypt(bs, start_of_cluster(s, host_offset), + guest_offset, buffer, bytes) < 0) { return false; } } @@ -890,11 +890,15 @@ static int perform_cow(BlockDriverState *bs, QCowL2Me= ta *m) =20 /* Encrypt the data if necessary before writing it */ if (bs->encrypted) { - if (!do_perform_cow_encrypt(bs, m->offset, m->alloc_offset, - start->offset, start_buffer, + if (!do_perform_cow_encrypt(bs, + m->offset + start->offset, + m->alloc_offset + start->offset, + start_buffer, start->nb_bytes) || - !do_perform_cow_encrypt(bs, m->offset, m->alloc_offset, - end->offset, end_buffer, end->nb_bytes= )) { + !do_perform_cow_encrypt(bs, + m->offset + end->offset, + m->alloc_offset + end->offset, + end_buffer, end->nb_bytes)) { ret =3D -EIO; goto fail; } --=20 2.17.2 From nobody Fri May 3 10:51:17 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.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 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1567791276; cv=none; d=zoho.com; s=zohoarc; b=mKdV93MUR1askfcpOSevcmSlCWGlNeBbHzzuQ/0e4BkDfeOFsj83SBPfm6p5WFzsVeJg7VbwIXdwcGbYbHdLicgKtQwoz6S62dI0XMO8+asSSJLfusn9Q0Mp7PACpoyY9Ut5hWIWG709ChTwt5VpHGw4Tk4vaXM5imeT78cSTkM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zoho.com; s=zohoarc; t=1567791276; h=Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:Message-ID:References:Sender:Subject:To:ARC-Authentication-Results; bh=Re146C+/nd0lr7mNGZjrGGOTEW3MtUwdUKbz2mtmqRU=; b=JG6ge851647AyU5uBMHH3UgLZ+cTcqTk899hsDY7BjKzq+MY+GFk/9rSLUvetXl2xRu1/f9q8fuw/BAyTiclF3wBGOqMQFmhyWg0T9gzcA5VSuPuV42AqP5kJlc+SnyHqWP9TdhiIZ091KfWVpxYCgOgPmGHdNY7RQqKElhrz0A= ARC-Authentication-Results: i=1; mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1567791276585620.824045107668; Fri, 6 Sep 2019 10:34:36 -0700 (PDT) Received: from localhost ([::1]:58942 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i6I83-000687-Dz for importer@patchew.org; Fri, 06 Sep 2019 13:34:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:46383) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1i6I61-0003rY-Q1 for qemu-devel@nongnu.org; Fri, 06 Sep 2019 13:32:31 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1i6I5z-0003Dp-Ed for qemu-devel@nongnu.org; Fri, 06 Sep 2019 13:32:29 -0400 Received: from mx1.redhat.com ([209.132.183.28]:59242) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1i6I5t-00034q-Rf; Fri, 06 Sep 2019 13:32:22 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 56D1310C051F; Fri, 6 Sep 2019 17:32:17 +0000 (UTC) Received: from maximlenovopc.usersys.redhat.com (unknown [10.35.206.83]) by smtp.corp.redhat.com (Postfix) with ESMTP id A8B585D9CA; Fri, 6 Sep 2019 17:32:14 +0000 (UTC) From: Maxim Levitsky To: qemu-devel@nongnu.org Date: Fri, 6 Sep 2019 20:32:01 +0300 Message-Id: <20190906173201.7926-4-mlevitsk@redhat.com> In-Reply-To: <20190906173201.7926-1-mlevitsk@redhat.com> References: <20190906173201.7926-1-mlevitsk@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.6.2 (mx1.redhat.com [10.5.110.65]); Fri, 06 Sep 2019 17:32:17 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 209.132.183.28 Subject: [Qemu-devel] [PATCH 3/3] qemu-iotests: test for bz #1745922 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Vladimir Sementsov-Ogievskiy , =?UTF-8?q?Daniel=20P=20=2E=20Berrang=C3=A9?= , qemu-block@nongnu.org, qemu-stable , Maxim Levitsky , Max Reitz Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Signed-off-by: Maxim Levitsky --- tests/qemu-iotests/263 | 76 ++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/263.out | 19 ++++++++++ tests/qemu-iotests/group | 1 + 3 files changed, 96 insertions(+) create mode 100755 tests/qemu-iotests/263 create mode 100644 tests/qemu-iotests/263.out diff --git a/tests/qemu-iotests/263 b/tests/qemu-iotests/263 new file mode 100755 index 0000000000..9cb23aa81e --- /dev/null +++ b/tests/qemu-iotests/263 @@ -0,0 +1,76 @@ +#!/usr/bin/env bash +# +# Test encrypted write that crosses cluster boundary of two unallocated cl= usters +# Based on 188 +# +# Copyright (C) 2017 Red Hat, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# + +# creator +owner=3Dmlevitsk@redhat.com + +seq=3D`basename $0` +echo "QA output created by $seq" + +status=3D1 # failure is the default! + +_cleanup() +{ + _cleanup_test_img +} +trap "_cleanup; exit \$status" 0 1 2 3 15 + +# get standard environment, filters and checks +. ./common.rc +. ./common.filter + +_supported_fmt qcow2 +_supported_proto generic +_supported_os Linux + + +size=3D1M + +SECRET=3D"secret,id=3Dsec0,data=3Dastrochicken" +SECRETALT=3D"secret,id=3Dsec0,data=3Dplatypus" + +_make_test_img --object $SECRET -o "encrypt.format=3Dluks,encrypt.key-secr= et=3Dsec0,encrypt.iter-time=3D10,cluster_size=3D64K" $size + +IMGSPEC=3D"driver=3D$IMGFMT,encrypt.key-secret=3Dsec0,file.filename=3D$TES= T_IMG" + +QEMU_IO_OPTIONS=3D$QEMU_IO_OPTIONS_NO_FMT + +echo +echo "=3D=3D reading whole image =3D=3D" +$QEMU_IO --object $SECRET -c "read -P 0 0 $size" --image-opts $IMGSPEC | _= filter_qemu_io | _filter_testdir + +echo +echo "=3D=3D write two 512 byte sectors on a cluster boundary =3D=3D" +$QEMU_IO --object $SECRET -c "write -P 0xAA 0xFE00 0x400" --image-opts $IM= GSPEC | _filter_qemu_io | _filter_testdir + +echo +echo "=3D=3D verify that the rest of the image is not changed =3D=3D" +$QEMU_IO --object $SECRET -c "read -P 0x00 0x00000 0xFE00" --image-opts $I= MGSPEC | _filter_qemu_io | _filter_testdir +$QEMU_IO --object $SECRET -c "read -P 0xAA 0x0FE00 0x400" --image-opts $IM= GSPEC | _filter_qemu_io | _filter_testdir +$QEMU_IO --object $SECRET -c "read -P 0x00 0x10200 0xEFE00" --image-opts $= IMGSPEC | _filter_qemu_io | _filter_testdir + +_cleanup_test_img + + +# success, all done +echo "*** done" +rm -f $seq.full +status=3D0 diff --git a/tests/qemu-iotests/263.out b/tests/qemu-iotests/263.out new file mode 100644 index 0000000000..fa4e4e0e4a --- /dev/null +++ b/tests/qemu-iotests/263.out @@ -0,0 +1,19 @@ +QA output created by 263 +Formatting 'TEST_DIR/t.IMGFMT', fmt=3DIMGFMT size=3D1048576 encrypt.format= =3Dluks encrypt.key-secret=3Dsec0 encrypt.iter-time=3D10 + +=3D=3D reading whole image =3D=3D +read 1048576/1048576 bytes at offset 0 +1 MiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + +=3D=3D write two 512 byte sectors on a cluster boundary =3D=3D +wrote 1024/1024 bytes at offset 65024 +1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) + +=3D=3D verify that the rest of the image is not changed =3D=3D +read 65024/65024 bytes at offset 0 +63.500 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 1024/1024 bytes at offset 65024 +1 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +read 982528/982528 bytes at offset 66048 +959.500 KiB, X ops; XX:XX:XX.X (XXX YYY/sec and XXX ops/sec) +*** done diff --git a/tests/qemu-iotests/group b/tests/qemu-iotests/group index d95d556414..be1c4a3baa 100644 --- a/tests/qemu-iotests/group +++ b/tests/qemu-iotests/group @@ -274,3 +274,4 @@ 257 rw 258 rw quick 262 rw quick migration +263 rw quick --=20 2.17.2