From patchwork Fri Aug 11 13:41:40 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: 800560 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=fwts-devel-bounces@lists.ubuntu.com; receiver=) Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) by ozlabs.org (Postfix) with ESMTP id 3xTR4X41nJz9t2W; Fri, 11 Aug 2017 23:41:48 +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 1dgACA-0000x9-GB; Fri, 11 Aug 2017 13:41:46 +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 1dgAC5-0000wP-4n for fwts-devel@lists.ubuntu.com; Fri, 11 Aug 2017 13:41:41 +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 1dgAC4-00080j-J3; Fri, 11 Aug 2017 13:41:40 +0000 From: Colin King To: fwts-devel@lists.ubuntu.com Subject: [PATCH] lib: fwts_smbios: use fwts_safe_memcpy to read SMBIOS entry Date: Fri, 11 Aug 2017 14:41:40 +0100 Message-Id: <20170811134140.3947-1-colin.king@canonical.com> X-Mailer: git-send-email 2.11.0 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 Use fwts_safe_memcpy rather than a fwts_safe_memread and then an un-safe copy as a micro optimisation. Also throw an error and return a NULL address if the memcpy failed because the memory is unreadable. Fixes a bug on aarch64 systems where this entry is non-readable and causes a BUS error. Signed-off-by: Colin Ian King Acked-by: Ivan Hu Acked-by: Alex Hung --- src/lib/src/fwts_smbios.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/lib/src/fwts_smbios.c b/src/lib/src/fwts_smbios.c index b3773aa2..abef4eb6 100644 --- a/src/lib/src/fwts_smbios.c +++ b/src/lib/src/fwts_smbios.c @@ -56,13 +56,14 @@ static void *fwts_smbios_find_entry_uefi(fwts_framework *fw, fwts_smbios_entry * const size_t size = sizeof(fwts_smbios_entry); if ((mapped_entry = fwts_mmap((off_t)addr, size)) != FWTS_MAP_FAILED) { - if (fwts_safe_memread(mapped_entry, size) == FWTS_OK) { - *entry = *mapped_entry; + if (fwts_safe_memcpy(entry, mapped_entry, size) == FWTS_OK) { (void)fwts_munmap(mapped_entry, size); *type = FWTS_SMBIOS; return addr; } else { + fwts_log_error(fw, "Cannot read mmap'd SMBIOS entry at 0x%p\n", addr); (void)fwts_munmap(mapped_entry, size); + addr = NULL; } } @@ -73,7 +74,7 @@ static void *fwts_smbios_find_entry_uefi(fwts_framework *fw, fwts_smbios_entry * return addr; } - fwts_log_error(fw, "Cannot mmap SMBIOS entry at %p\n", addr); + fwts_log_error(fw, "Cannot mmap SMBIOS entry at 0x%p\n", addr); } return NULL; }