From patchwork Fri Jul 14 09:52:20 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Colin Ian King X-Patchwork-Id: 788265 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) by ozlabs.org (Postfix) with ESMTP id 3x87KP1nF2z9s7m; Fri, 14 Jul 2017 19:52:57 +1000 (AEST) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.76) (envelope-from ) id 1dVxHM-00052m-20; Fri, 14 Jul 2017 09:52:56 +0000 Received: from youngberry.canonical.com ([91.189.89.112]) by huckleberry.canonical.com with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1dVxGt-0004vj-M9 for fwts-devel@lists.ubuntu.com; Fri, 14 Jul 2017 09:52:27 +0000 Received: from 1.general.cking.uk.vpn ([10.172.193.212] helo=localhost) by youngberry.canonical.com with esmtpsa (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.76) (envelope-from ) id 1dVxGt-0001f5-BW; Fri, 14 Jul 2017 09:52:27 +0000 From: Colin King To: fwts-devel@lists.ubuntu.com Subject: [PATCH 3/8] acpi: mcfg: add safe memory read check on mmap'd PCI config memory Date: Fri, 14 Jul 2017 10:52:20 +0100 Message-Id: <20170714095225.1259-3-colin.king@canonical.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170714095225.1259-1-colin.king@canonical.com> References: <20170714095225.1259-1-colin.king@canonical.com> MIME-Version: 1.0 X-BeenThere: fwts-devel@lists.ubuntu.com X-Mailman-Version: 2.1.14 Precedence: list List-Id: Firmware Test Suite Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: fwts-devel-bounces@lists.ubuntu.com Sender: fwts-devel-bounces@lists.ubuntu.com From: Colin Ian King Ensure we can read the mmap'd memory. Signed-off-by: Colin Ian King Acked-by: Alex Hung Acked-by: Ivan Hu --- src/acpi/mcfg/mcfg.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/acpi/mcfg/mcfg.c b/src/acpi/mcfg/mcfg.c index 43c747f2..08a90e0c 100644 --- a/src/acpi/mcfg/mcfg.c +++ b/src/acpi/mcfg/mcfg.c @@ -66,9 +66,19 @@ static int compare_config_space( } if ((mapped_config_space = fwts_mmap(config->base_address, page_size)) == FWTS_MAP_FAILED) { - fwts_log_error(fw, "Cannot mmap PCI config space at 0x%" PRIx64 ".", config->base_address); + fwts_log_error(fw, "Cannot mmap PCI config space at 0x%" PRIx64 ".", + config->base_address); return FWTS_ERROR; } + + /* We only need to check if just the config space is readable */ + if (fwts_safe_memread(mapped_config_space, sizeof(config_space)) != FWTS_OK) { + fwts_log_error(fw, "Cannot read PCI config space at 0x%" PRIx64 ".", + config->base_address); + (void)fwts_munmap(mapped_config_space, page_size); + return FWTS_ERROR; + } + /* * Need to explicitly do byte comparisons on region * memcmp() fails as this can do 64 bit reads