From nobody Mon Feb 9 04:44:22 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1594990907; cv=none; d=zohomail.com; s=zohoarc; b=D8r2cKQezpyA2qzPEfJ2pbUFVyy+ggHvXRmBeF3Q1UTo1+rm0PzqrRnUDTxjN2RTCLpATJbbw6LEeSHE87eFNJZyoZkY4c/OqEYiYZLTU9gB4O1+vE5EWpB7fJDWKwSMRwi3leaMaYD5ZNbGoHpBLtH/bTKfVZxBOrnhNNU0wDo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1594990907; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ssUMs41lZlXK8WWkgZsHeKKzHbcvcpeTuYKdsOrFt4k=; b=D+2WJ4t97fe85WUTrxZN2WdvlcbgIo/f5+D+Ju5xVGMBay/vuQ5wIXtuHzP843AgqGqcGiCNXbFPPmr+h2PDyjcx81H9r7doArcCpIgyJSSC3sZwvbaviaFtc35QGIVqyr9PeMe5AQoxLUn/9p4ffGf6e+nByqsomKrbS2/KrS8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass 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 1594990907410820.6941969017158; Fri, 17 Jul 2020 06:01:47 -0700 (PDT) Received: from localhost ([::1]:33720 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1jwPzm-0005FO-3T for importer@patchew.org; Fri, 17 Jul 2020 09:01:46 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:52246) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1jwPtt-00050V-6h for qemu-devel@nongnu.org; Fri, 17 Jul 2020 08:55:41 -0400 Received: from us-smtp-1.mimecast.com ([205.139.110.61]:29272 helo=us-smtp-delivery-1.mimecast.com) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1jwPtp-0008O8-G2 for qemu-devel@nongnu.org; Fri, 17 Jul 2020 08:55:40 -0400 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-102-KZiDee97MSK164cp6rMRzQ-1; Fri, 17 Jul 2020 08:55:35 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 66E81802B62; Fri, 17 Jul 2020 12:55:27 +0000 (UTC) Received: from linux.fritz.box.com (ovpn-113-80.ams2.redhat.com [10.36.113.80]) by smtp.corp.redhat.com (Postfix) with ESMTP id 76B8B72AE8; Fri, 17 Jul 2020 12:55:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1594990536; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ssUMs41lZlXK8WWkgZsHeKKzHbcvcpeTuYKdsOrFt4k=; b=PW9gbHo8IX+2lTcNZPnlQu/XIi1yEgQ4yt+1MCWvpQB+45QO2eqf6jHZTAxqoOQnPnZ6HR dKllKLdLqzeUayCIpFDnGEjeyN3FsYg0BnFmBLkyE4lqDVA1VjCJYQZ+DBQh+GVwjlucK1 TSeqfJhcKLG+7nlWzfloBAL4B+e0KmE= X-MC-Unique: KZiDee97MSK164cp6rMRzQ-1 From: Kevin Wolf To: qemu-block@nongnu.org Subject: [PULL 08/12] block: Require aligned image size to avoid assertion failure Date: Fri, 17 Jul 2020 14:55:06 +0200 Message-Id: <20200717125510.238374-9-kwolf@redhat.com> In-Reply-To: <20200717125510.238374-1-kwolf@redhat.com> References: <20200717125510.238374-1-kwolf@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=kwolf@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.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; Received-SPF: pass client-ip=205.139.110.61; envelope-from=kwolf@redhat.com; helo=us-smtp-delivery-1.mimecast.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/07/17 01:33:03 X-ACL-Warn: Detected OS = Linux 2.2.x-3.x [generic] [fuzzy] X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=unavailable autolearn_force=no X-Spam_action: no action 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: kwolf@redhat.com, peter.maydell@linaro.org, qemu-devel@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" Unaligned requests will automatically be aligned to bl.request_alignment and we can't extend write requests to access space beyond the end of the image without resizing the image, so if we have the WRITE permission, but not the RESIZE one, it's required that the image size is aligned. Failing to meet this requirement could cause assertion failures like this if RESIZE permissions weren't requested: qemu-img: block/io.c:1910: bdrv_co_write_req_prepare: Assertion `end_sector= <=3D bs->total_sectors || child->perm & BLK_PERM_RESIZE' failed. This was e.g. triggered by qemu-img converting to a target image with 4k request alignment when the image was only aligned to 512 bytes, but not to 4k. Turn this into a graceful error in bdrv_check_perm() so that WRITE without RESIZE can only be taken if the image size is aligned. If a user holds both permissions and drops only RESIZE, the function will return an error, but bdrv_child_try_set_perm() will ignore the failure silently if permissions are only requested to be relaxed and just keep both permissions while returning success. Signed-off-by: Kevin Wolf Message-Id: <20200716142601.111237-2-kwolf@redhat.com> Reviewed-by: Max Reitz Signed-off-by: Kevin Wolf --- block.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/block.c b/block.c index 35a372df57..d9ac0e07eb 100644 --- a/block.c +++ b/block.c @@ -2025,6 +2025,22 @@ static int bdrv_check_perm(BlockDriverState *bs, Blo= ckReopenQueue *q, return -EPERM; } =20 + /* + * Unaligned requests will automatically be aligned to bl.request_alig= nment + * and without RESIZE we can't extend requests to write to space beyon= d the + * end of the image, so it's required that the image size is aligned. + */ + if ((cumulative_perms & (BLK_PERM_WRITE | BLK_PERM_WRITE_UNCHANGED)) && + !(cumulative_perms & BLK_PERM_RESIZE)) + { + if ((bs->total_sectors * BDRV_SECTOR_SIZE) % bs->bl.request_alignm= ent) { + error_setg(errp, "Cannot get 'write' permission without 'resiz= e': " + "Image size is not a multiple of request " + "alignment"); + return -EPERM; + } + } + /* Check this node */ if (!drv) { return 0; --=20 2.25.4