From nobody Sat May 4 15:15:31 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; dkim=fail; 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 (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1501860401165488.3790837487286; Fri, 4 Aug 2017 08:26:41 -0700 (PDT) Received: from localhost ([::1]:45641 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ddeUp-0008Nm-DF for importer@patchew.org; Fri, 04 Aug 2017 11:26:39 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54822) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dddI1-0002oP-Dn for qemu-devel@nongnu.org; Fri, 04 Aug 2017 10:09:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dddHm-0003gp-0g for qemu-devel@nongnu.org; Fri, 04 Aug 2017 10:09:21 -0400 Received: from fanzine.igalia.com ([91.117.99.155]:46544) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1dddHl-0003fQ-IL; Fri, 04 Aug 2017 10:09:05 -0400 Received: from a88-114-101-76.elisa-laajakaista.fi ([88.114.101.76] helo=perseus.local) by fanzine.igalia.com with esmtpsa (Cipher TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim) id 1dddHi-0003vU-Rw; Fri, 04 Aug 2017 16:09:03 +0200 Received: from berto by perseus.local with local (Exim 4.89) (envelope-from ) id 1dddHV-0000Et-Gy; Fri, 04 Aug 2017 17:08:49 +0300 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=igalia.com; s=20170329; h=Message-Id:Date:Subject:Cc:To:From; bh=ivnb1HZRjQeUT7hmkl3XrPON8vuGRK/VzIrgQDSTWis=; b=seS3BRTEHJ6nm+RltIobHMq8ZItpPnFNEIweWIHGoCIbJXtPGantJZfBgJfdggctNa1M8Fp6EzpTVRa8TJ4AISqhPooZ3RjVAJnZ3qhtQ3k7ZoTqH3nCwbVAlPv0yauzDft3jfqhfVi3bwQSqP0Fxl9kTd7Q2omrtEeY0Uu88mX4kNTtVdHv0Qc8SIFS74ztOZF604OQdcZUrC4fpW+HXQAzAKnnyLvJsm8ZHe2sn+psNgcYQXwBqDGINg21naQH7to5GBJipFXm/Fee5H1itn38dGPqEVuu20nKMurW1QTqh5/x9mIhAw5obptumP4PoJLdRxqNUAczETPYAGngTQ==; From: Alberto Garcia To: qemu-devel@nongnu.org Date: Fri, 4 Aug 2017 17:08:48 +0300 Message-Id: <20170804140848.880-1-berto@igalia.com> X-Mailer: git-send-email 2.11.0 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x (no timestamps) [generic] [fuzzy] X-Received-From: 91.117.99.155 Subject: [Qemu-devel] [PATCH] quorum: Handle bdrv_getlength() failures in quorum_co_flush() 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: Alberto Garcia , Markus Armbruster , qemu-block@nongnu.org Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZohoMail: RDKM_2 RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" A bdrv_getlength() call can fail and return a negative value. This is not being handled in quorum_co_flush(), which can result in a QUORUM_REPORT_BAD event with an arbitrary value on the 'sectors-count' field. Reported-by: Markus Armbruster Signed-off-by: Alberto Garcia Reviewed-by: Eric Blake --- block/quorum.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/block/quorum.c b/block/quorum.c index 55ba916655..d77991d680 100644 --- a/block/quorum.c +++ b/block/quorum.c @@ -785,8 +785,9 @@ static coroutine_fn int quorum_co_flush(BlockDriverStat= e *bs) for (i =3D 0; i < s->num_children; i++) { result =3D bdrv_co_flush(s->children[i]->bs); if (result) { + int64_t length =3D bdrv_getlength(s->children[i]->bs); quorum_report_bad(QUORUM_OP_TYPE_FLUSH, 0, - bdrv_getlength(s->children[i]->bs), + length > 0 ? length : 0, s->children[i]->bs->node_name, result); result_value.l =3D result; quorum_count_vote(&error_votes, &result_value, i); --=20 2.11.0