/** @file\r
This driver measures SMBIOS table to TPM.\r
- \r
-Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>\r
-This program and the accompanying materials \r
-are licensed and made available under the terms and conditions of the BSD License \r
-which accompanies this distribution. The full text of the license may be found at \r
-http://opensource.org/licenses/bsd-license.php \r
- \r
-THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+\r
+Copyright (c) 2015 - 2017, Intel Corporation. All rights reserved.<BR>\r
+This program and the accompanying materials\r
+are licensed and made available under the terms and conditions of the BSD License\r
+which accompanies this distribution. The full text of the license may be found at\r
+http://opensource.org/licenses/bsd-license.php\r
+\r
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
\r
**/\r
\r
SMBIOS_FILTER_TABLE mSmbiosFilterType23BlackList[] = {\r
{0x17, OFFSET_OF(SMBIOS_TABLE_TYPE23, ResetCount), FIELD_SIZE_OF(SMBIOS_TABLE_TYPE23, ResetCount), 0},\r
};\r
+SMBIOS_FILTER_TABLE mSmbiosFilterType27BlackList[] = {\r
+ {0x1B, OFFSET_OF(SMBIOS_TABLE_TYPE27, NominalSpeed), FIELD_SIZE_OF(SMBIOS_TABLE_TYPE27, NominalSpeed), 0},\r
+};\r
SMBIOS_FILTER_TABLE mSmbiosFilterType39BlackList[] = {\r
{0x27, OFFSET_OF(SMBIOS_TABLE_TYPE39, SerialNumber), FIELD_SIZE_OF(SMBIOS_TABLE_TYPE39, SerialNumber), SMBIOS_FILTER_TABLE_FLAG_IS_STRING},\r
{0x27, OFFSET_OF(SMBIOS_TABLE_TYPE39, AssetTagNumber), FIELD_SIZE_OF(SMBIOS_TABLE_TYPE39, AssetTagNumber), SMBIOS_FILTER_TABLE_FLAG_IS_STRING},\r
{0x12, NULL, 0},\r
{0x16, mSmbiosFilterType22BlackList, sizeof(mSmbiosFilterType22BlackList)/sizeof(mSmbiosFilterType22BlackList[0])},\r
{0x17, mSmbiosFilterType23BlackList, sizeof(mSmbiosFilterType23BlackList)/sizeof(mSmbiosFilterType23BlackList[0])},\r
+ {0x1B, mSmbiosFilterType27BlackList, sizeof(mSmbiosFilterType27BlackList)/sizeof(mSmbiosFilterType27BlackList[0])},\r
{0x1F, NULL, 0},\r
{0x21, NULL, 0},\r
{0x27, mSmbiosFilterType39BlackList, sizeof(mSmbiosFilterType39BlackList)/sizeof(mSmbiosFilterType39BlackList[0])},\r
// look for the two consecutive zeros, check the string limit by the way.\r
//\r
String = NULL;\r
- while (*CharInStr != 0 || *(CharInStr+1) != 0) { \r
+ while (*CharInStr != 0 || *(CharInStr+1) != 0) {\r
if (*CharInStr == 0) {\r
Size += 1;\r
CharInStr++;\r
DEBUG ((EFI_D_INFO, "Smbios Table (Type - %d):\n", ((SMBIOS_STRUCTURE *)TableEntry)->Type));\r
DEBUG_CODE (InternalDumpHex (TableEntry, TableEntrySize););\r
\r
- FilterStruct = GetFilterStructByType (((SMBIOS_STRUCTURE *)TableEntry)->Type);\r
- if (FilterStruct != NULL) {\r
- if (FilterStruct->Filter == NULL || FilterStruct->FilterCount == 0) {\r
- // zero all table entries, except header\r
- ZeroMem ((UINT8 *)TableEntry + sizeof(SMBIOS_STRUCTURE), TableEntrySize - sizeof(SMBIOS_STRUCTURE));\r
- } else {\r
- Filter = FilterStruct->Filter;\r
- for (Index = 0; Index < FilterStruct->FilterCount; Index++) {\r
- if ((Filter[Index].Flags & SMBIOS_FILTER_TABLE_FLAG_IS_STRING) != 0) {\r
- CopyMem (&StringId, (UINT8 *)TableEntry + Filter[Index].Offset, sizeof(StringId));\r
- if (StringId != 0) {\r
- // set ' ' for string field\r
- String = GetSmbiosStringById (TableEntry, StringId, &StringLen);\r
- //DEBUG ((EFI_D_INFO,"StrId(0x%x)-%a(%d)\n", StringId, String, StringLen));\r
- SetMem (String, StringLen, ' ');\r
+ //\r
+ // Skip measurement for OEM types.\r
+ //\r
+ if (((SMBIOS_STRUCTURE *)TableEntry)->Type >= SMBIOS_OEM_BEGIN) {\r
+ // zero all table fields, except header\r
+ ZeroMem ((UINT8 *)TableEntry + sizeof(SMBIOS_STRUCTURE), TableEntrySize - sizeof(SMBIOS_STRUCTURE));\r
+ } else {\r
+ FilterStruct = GetFilterStructByType (((SMBIOS_STRUCTURE *)TableEntry)->Type);\r
+ if (FilterStruct != NULL) {\r
+ if (FilterStruct->Filter == NULL || FilterStruct->FilterCount == 0) {\r
+ // zero all table fields, except header\r
+ ZeroMem ((UINT8 *)TableEntry + sizeof(SMBIOS_STRUCTURE), TableEntrySize - sizeof(SMBIOS_STRUCTURE));\r
+ } else {\r
+ Filter = FilterStruct->Filter;\r
+ for (Index = 0; Index < FilterStruct->FilterCount; Index++) {\r
+ if (((SMBIOS_STRUCTURE *) TableEntry)->Length >= (Filter[Index].Offset + Filter[Index].Size)) {\r
+ //\r
+ // The field is present in the SMBIOS entry.\r
+ //\r
+ if ((Filter[Index].Flags & SMBIOS_FILTER_TABLE_FLAG_IS_STRING) != 0) {\r
+ CopyMem (&StringId, (UINT8 *)TableEntry + Filter[Index].Offset, sizeof(StringId));\r
+ if (StringId != 0) {\r
+ // set ' ' for string field\r
+ String = GetSmbiosStringById (TableEntry, StringId, &StringLen);\r
+ ASSERT (String != NULL);\r
+ //DEBUG ((EFI_D_INFO,"StrId(0x%x)-%a(%d)\n", StringId, String, StringLen));\r
+ SetMem (String, StringLen, ' ');\r
+ }\r
+ }\r
+ // zero non-string field\r
+ ZeroMem ((UINT8 *)TableEntry + Filter[Index].Offset, Filter[Index].Size);\r
}\r
}\r
- // zero non-string field\r
- ZeroMem ((UINT8 *)TableEntry + Filter[Index].Offset, Filter[Index].Size);\r
}\r
}\r
}\r
\r
@param Head Pointer to the beginning of SMBIOS structure.\r
@param NumberOfStrings The returned number of optional strings that follow the formatted structure.\r
- \r
+\r
@return Size The returned size.\r
**/\r
UINTN\r
//\r
// look for the two consecutive zeros, check the string limit by the way.\r
//\r
- while (*CharInStr != 0 || *(CharInStr+1) != 0) { \r
+ while (*CharInStr != 0 || *(CharInStr+1) != 0) {\r
if (*CharInStr == 0) {\r
Size += 1;\r
CharInStr++;\r
}\r
\r
/**\r
- Measure SMBIOS with EV_EFI_HANDOFF_TABLES to PCR[1]\r
+ Measure SMBIOS with EV_EFI_HANDOFF_TABLES to PCR[1].\r
+\r
+ @param[in] Event Event whose notification function is being invoked.\r
+ @param[in] Context Pointer to the notification function's context.\r
+\r
**/\r
VOID\r
EFIAPI\r
\r
/**\r
\r
- Driver to produce Smbios measurement. \r
+ Driver to produce Smbios measurement.\r
\r
@param ImageHandle Module's image handle\r
@param SystemTable Pointer of EFI_SYSTEM_TABLE\r
\r
- @retval EFI_SUCCESS Smbios protocol installed\r
- @retval Other No protocol installed, unload driver.\r
+ @return Status returned from EfiCreateEventReadyToBootEx().\r
\r
**/\r
EFI_STATUS\r
Status = gBS->LocateProtocol (&gEfiSmbiosProtocolGuid, NULL, (VOID **) &mSmbios);\r
ASSERT_EFI_ERROR (Status);\r
DEBUG ((DEBUG_INFO, "The Smbios Table Version: %x.%x\n", mSmbios->MajorVersion, mSmbios->MinorVersion));\r
- \r
+\r
if (mSmbios->MajorVersion < 2 || (mSmbios->MajorVersion == 2 && mSmbios->MinorVersion < 7)){\r
mMaxLen = SMBIOS_STRING_MAX_LENGTH;\r
} else if (mSmbios->MajorVersion < 3) {\r