From nobody Fri Dec 19 17:14:41 2025 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1551951576998599.8328622490423; Thu, 7 Mar 2019 01:39:36 -0800 (PST) Received: from localhost ([127.0.0.1]:48092 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1pUz-0006cG-U6 for importer@patchew.org; Thu, 07 Mar 2019 04:39:33 -0500 Received: from eggs.gnu.org ([209.51.188.92]:54723) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1h1pT1-0005So-5X for qemu-devel@nongnu.org; Thu, 07 Mar 2019 04:37:31 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1h1pT0-0004uf-8o for qemu-devel@nongnu.org; Thu, 07 Mar 2019 04:37:31 -0500 Received: from mx1.redhat.com ([209.132.183.28]:56538) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1h1pSy-0004tG-E8; Thu, 07 Mar 2019 04:37:28 -0500 Received: from smtp.corp.redhat.com (int-mx07.intmail.prod.int.phx2.redhat.com [10.5.11.22]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 99FAC13AB2; Thu, 7 Mar 2019 09:37:27 +0000 (UTC) Received: from blackfin.pond.sub.org (ovpn-116-92.ams2.redhat.com [10.36.116.92]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 5CC541001DE8; Thu, 7 Mar 2019 09:37:25 +0000 (UTC) Received: by blackfin.pond.sub.org (Postfix, from userid 1000) id CCAFE11385D5; Thu, 7 Mar 2019 10:37:23 +0100 (CET) From: Markus Armbruster To: qemu-devel@nongnu.org Date: Thu, 7 Mar 2019 10:37:22 +0100 Message-Id: <20190307093723.655-4-armbru@redhat.com> In-Reply-To: <20190307093723.655-1-armbru@redhat.com> References: <20190307093723.655-1-armbru@redhat.com> X-Scanned-By: MIMEDefang 2.84 on 10.5.11.22 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.29]); Thu, 07 Mar 2019 09:37:27 +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] [RFC PATCH v6 3/4] fixup! hw/block: better reporting on pflash backing file mismatch 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, qemu-block@nongnu.org, alex.bennee@linaro.org, philmd@redhat.com, mreitz@redhat.com, lersek@redhat.com 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" --- hw/block/pflash_cfi02.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/hw/block/pflash_cfi02.c b/hw/block/pflash_cfi02.c index 33779ce807..d30a351472 100644 --- a/hw/block/pflash_cfi02.c +++ b/hw/block/pflash_cfi02.c @@ -39,6 +39,7 @@ #include "hw/hw.h" #include "hw/block/flash.h" #include "qapi/error.h" +#include "qemu/error-report.h" #include "qemu/timer.h" #include "sysemu/block-backend.h" #include "qemu/host-utils.h" @@ -550,12 +551,6 @@ static void pflash_cfi02_realize(DeviceState *dev, Err= or **errp) } =20 chip_len =3D pfl->sector_len * pfl->nb_blocs; - /* XXX: to be fixed */ -#if 0 - if (total_len !=3D (8 * 1024 * 1024) && total_len !=3D (16 * 1024 * 10= 24) && - total_len !=3D (32 * 1024 * 1024) && total_len !=3D (64 * 1024 * 1= 024)) - return NULL; -#endif =20 memory_region_init_rom_device(&pfl->orig_mem, OBJECT(pfl), pfl->be ? &pflash_cfi02_ops_be : &pflash_cfi02_ops= _le, @@ -581,6 +576,27 @@ static void pflash_cfi02_realize(DeviceState *dev, Err= or **errp) } =20 if (pfl->blk) { + /* + * Validate the backing store is the right size for pflash + * devices. If the user supplies a larger file we ignore the + * tail. + */ + int64_t backing_len =3D blk_getlength(pfl->blk); + if (backing_len < 0) { + error_setg(errp, "unable to check size of backing file"); + return; + } + + if (backing_len < chip_len) { + error_setg(errp, "device needs %" PRIu32 " bytes, " + "backing file provides only %" PRIu64 " bytes", + chip_len, backing_len); + return; + } else if (backing_len > chip_len) { + warn_report("device needs %" PRIu32 " bytes, rest ignored", + chip_len); + } + /* read the initial flash content */ ret =3D blk_pread(pfl->blk, 0, pfl->storage, chip_len); if (ret < 0) { --=20 2.17.2