From patchwork Thu Mar 9 09:00:11 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ivan Hu X-Patchwork-Id: 1754544 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ubuntu.com (client-ip=91.189.94.19; helo=huckleberry.canonical.com; envelope-from=fwts-devel-bounces@lists.ubuntu.com; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=canonical.com header.i=@canonical.com header.a=rsa-sha256 header.s=20210705 header.b=Vu1mn1em; dkim-atps=neutral Received: from huckleberry.canonical.com (huckleberry.canonical.com [91.189.94.19]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4PXNSd0Wbhz2469 for ; Thu, 9 Mar 2023 20:00:48 +1100 (AEDT) Received: from localhost ([127.0.0.1] helo=huckleberry.canonical.com) by huckleberry.canonical.com with esmtp (Exim 4.86_2) (envelope-from ) id 1paC8f-0005pn-U8; Thu, 09 Mar 2023 09:00:41 +0000 Received: from smtp-relay-canonical-1.internal ([10.131.114.174] helo=smtp-relay-canonical-1.canonical.com) by huckleberry.canonical.com with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.86_2) (envelope-from ) id 1paC8a-0005p9-KD for fwts-devel@lists.ubuntu.com; Thu, 09 Mar 2023 09:00:36 +0000 Received: from canonical.com (unknown [106.104.136.95]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-256) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-canonical-1.canonical.com (Postfix) with ESMTPSA id 433EB3FFF7 for ; Thu, 9 Mar 2023 09:00:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1678352436; bh=gjfC4IZAu9lTwnl212tC4L4pm+CYfRxATF7EY8gTBd8=; h=From:To:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Vu1mn1em1KN9MNetNNZOD58IcDjg7yalqn6Ha/NmkL1Ni6qpT/gtIFoSr32Npd/OZ dJS9YFOnyleBYKePle9RVnFBgLqy6PM/56giDDiwdbZAffwqPcz0RSQKeal0jawDI5 ENkC87zpJiaencNJJO20CBE21Ano6+p/Hi4ezNE26j47MdGu6uUGcsIutVfwUSmIEr 4Hy2OmnX6Zqi+cTzWl6/8g0tAu085QzYB/tRzA1v/1qFte5dgxJ0V7chHVkHxdkDdQ w2xYvWKs+XjQ87XwEGN1V/cvCautJ1KbpXkAPhzRJWq1gZ0JifB7zOfzdfm81CzP2k vNvelMF9gJsAQ== From: Ivan Hu To: fwts-devel@lists.ubuntu.com Subject: [PATCH 03/10] dmicheck: add status check for type 4 Date: Thu, 9 Mar 2023 17:00:11 +0800 Message-Id: <20230309090018.32029-3-ivan.hu@canonical.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230309090018.32029-1-ivan.hu@canonical.com> References: <20230309090018.32029-1-ivan.hu@canonical.com> MIME-Version: 1.0 X-BeenThere: fwts-devel@lists.ubuntu.com X-Mailman-Version: 2.1.20 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" Signed-off-by: Ivan Hu --- src/dmi/dmicheck/dmicheck.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/dmi/dmicheck/dmicheck.c b/src/dmi/dmicheck/dmicheck.c index 3f28b35a..1952309c 100644 --- a/src/dmi/dmicheck/dmicheck.c +++ b/src/dmi/dmicheck/dmicheck.c @@ -57,6 +57,7 @@ #define DMI_RESERVED_BIT_USED "DMIReservedBitUsed" #define DMI_RESERVED_OFFSET_NONZERO "DMIReservedOffsetNonZero" +#define GET_UINT8(x) (uint8_t)(*(const uint8_t *)(x)) #define GET_UINT16(x) (uint16_t)(*(const uint16_t *)(x)) #define GET_UINT32(x) (uint32_t)(*(const uint32_t *)(x)) #define GET_UINT64(x) (uint64_t)(*(const uint64_t *)(x)) @@ -1394,6 +1395,16 @@ static void dmicheck_entry(fwts_framework *fw, dmi_min_max_uint8_check(fw, table, addr, "Processor Family", hdr, 0x6, 0x1, 0xfe); dmi_str_check(fw, table, addr, "Processor Manufacturer", hdr, 0x7); dmi_str_check(fw, table, addr, "Processor Version", hdr, 0x10); + if (((GET_UINT8(data + 0x18) & 0x07) == 0x5) || ((GET_UINT8(data + 0x18) & 0x07) == 0x6)) + fwts_failed(fw, LOG_LEVEL_HIGH, DMI_VALUE_OUT_OF_RANGE, + "Out of range value 0x%2.2" PRIx8 " " + "bits 0..2 set to illegal value 0x5 or 0x6 " + "while accessing entry '%s' @ 0x%8.8" PRIx32 + ", field '%s', offset 0x%2.2x", + GET_UINT8(data + 0x18), + table, addr, "Status", 0x18); + dmi_reserved_bits_check(fw, table, addr, "Status", hdr, sizeof(uint8_t), 0x18, 3, 5); + dmi_reserved_bits_check(fw, table, addr, "Status", hdr, sizeof(uint8_t), 0x18, 7, 7); dmi_min_max_uint8_check(fw, table, addr, "Upgrade", hdr, 0x19, 0x1, 0x3f); if (hdr->length < 0x23) break;