X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=SecurityPkg%2FTcg%2FTcg2Config%2FTcg2ConfigDriver.c;fp=SecurityPkg%2FTcg%2FTcg2Config%2FTcg2ConfigDriver.c;h=edf5f0fc77cae40063d4ac1520caee9d90f09a5c;hp=fca5ae2645c141932e090144ed1b2033a7a6523b;hb=c411b485b63a671a1e276700cff025c73997233c;hpb=39de741e2dcb8f11e9b4438e37224797643d8451 diff --git a/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigDriver.c b/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigDriver.c index fca5ae2645..edf5f0fc77 100644 --- a/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigDriver.c +++ b/SecurityPkg/Tcg/Tcg2Config/Tcg2ConfigDriver.c @@ -20,38 +20,42 @@ extern TPM_INSTANCE_ID mTpmInstanceId[TPM_DEVICE_MAX + 1]; **/ VOID UpdateDefaultPCRBanks ( - IN VOID *HiiPackage, - IN UINTN HiiPackageSize, - IN UINT32 PCRBanks + IN VOID *HiiPackage, + IN UINTN HiiPackageSize, + IN UINT32 PCRBanks ) { - EFI_HII_PACKAGE_HEADER *HiiPackageHeader; - EFI_IFR_OP_HEADER *IfrOpCodeHeader; - EFI_IFR_CHECKBOX *IfrCheckBox; - EFI_IFR_DEFAULT *IfrDefault; + EFI_HII_PACKAGE_HEADER *HiiPackageHeader; + EFI_IFR_OP_HEADER *IfrOpCodeHeader; + EFI_IFR_CHECKBOX *IfrCheckBox; + EFI_IFR_DEFAULT *IfrDefault; HiiPackageHeader = (EFI_HII_PACKAGE_HEADER *)HiiPackage; switch (HiiPackageHeader->Type) { - case EFI_HII_PACKAGE_FORMS: - IfrOpCodeHeader = (EFI_IFR_OP_HEADER *)(HiiPackageHeader + 1); - while ((UINTN)IfrOpCodeHeader < (UINTN)HiiPackageHeader + HiiPackageHeader->Length) { - switch (IfrOpCodeHeader->OpCode) { - case EFI_IFR_CHECKBOX_OP: - IfrCheckBox = (EFI_IFR_CHECKBOX *)IfrOpCodeHeader; - if ((IfrCheckBox->Question.QuestionId >= KEY_TPM2_PCR_BANKS_REQUEST_0) && (IfrCheckBox->Question.QuestionId <= KEY_TPM2_PCR_BANKS_REQUEST_4)) { - IfrDefault = (EFI_IFR_DEFAULT *)(IfrCheckBox + 1); - ASSERT (IfrDefault->Header.OpCode == EFI_IFR_DEFAULT_OP); - ASSERT (IfrDefault->Type == EFI_IFR_TYPE_BOOLEAN); - IfrDefault->Value.b = (BOOLEAN)((PCRBanks >> (IfrCheckBox->Question.QuestionId - KEY_TPM2_PCR_BANKS_REQUEST_0)) & 0x1); + case EFI_HII_PACKAGE_FORMS: + IfrOpCodeHeader = (EFI_IFR_OP_HEADER *)(HiiPackageHeader + 1); + while ((UINTN)IfrOpCodeHeader < (UINTN)HiiPackageHeader + HiiPackageHeader->Length) { + switch (IfrOpCodeHeader->OpCode) { + case EFI_IFR_CHECKBOX_OP: + IfrCheckBox = (EFI_IFR_CHECKBOX *)IfrOpCodeHeader; + if ((IfrCheckBox->Question.QuestionId >= KEY_TPM2_PCR_BANKS_REQUEST_0) && (IfrCheckBox->Question.QuestionId <= KEY_TPM2_PCR_BANKS_REQUEST_4)) { + IfrDefault = (EFI_IFR_DEFAULT *)(IfrCheckBox + 1); + ASSERT (IfrDefault->Header.OpCode == EFI_IFR_DEFAULT_OP); + ASSERT (IfrDefault->Type == EFI_IFR_TYPE_BOOLEAN); + IfrDefault->Value.b = (BOOLEAN)((PCRBanks >> (IfrCheckBox->Question.QuestionId - KEY_TPM2_PCR_BANKS_REQUEST_0)) & 0x1); + } + + break; } - break; + + IfrOpCodeHeader = (EFI_IFR_OP_HEADER *)((UINTN)IfrOpCodeHeader + IfrOpCodeHeader->Length); } - IfrOpCodeHeader = (EFI_IFR_OP_HEADER *)((UINTN)IfrOpCodeHeader + IfrOpCodeHeader->Length); - } - break; + + break; } - return ; + + return; } /** @@ -67,16 +71,16 @@ UpdateDefaultPCRBanks ( **/ VOID InitializeTcg2VersionInfo ( - IN TCG2_CONFIG_PRIVATE_DATA *PrivateData + IN TCG2_CONFIG_PRIVATE_DATA *PrivateData ) { - EFI_STATUS Status; - EFI_STRING ConfigRequestHdr; - BOOLEAN ActionFlag; - TCG2_VERSION Tcg2Version; - UINTN DataSize; - UINT64 PcdTcg2PpiVersion; - UINT8 PcdTpm2AcpiTableRev; + EFI_STATUS Status; + EFI_STRING ConfigRequestHdr; + BOOLEAN ActionFlag; + TCG2_VERSION Tcg2Version; + UINTN DataSize; + UINT64 PcdTcg2PpiVersion; + UINT8 PcdTpm2AcpiTableRev; // // Get the PCD value before initializing efi varstore configuration data. @@ -85,7 +89,7 @@ InitializeTcg2VersionInfo ( CopyMem ( &PcdTcg2PpiVersion, PcdGetPtr (PcdTcgPhysicalPresenceInterfaceVer), - AsciiStrSize ((CHAR8 *) PcdGetPtr (PcdTcgPhysicalPresenceInterfaceVer)) + AsciiStrSize ((CHAR8 *)PcdGetPtr (PcdTcgPhysicalPresenceInterfaceVer)) ); PcdTpm2AcpiTableRev = PcdGet8 (PcdTpm2AcpiTableRev); @@ -101,13 +105,13 @@ InitializeTcg2VersionInfo ( ); ASSERT (ConfigRequestHdr != NULL); DataSize = sizeof (Tcg2Version); - Status = gRT->GetVariable ( - TCG2_VERSION_NAME, - &gTcg2ConfigFormSetGuid, - NULL, - &DataSize, - &Tcg2Version - ); + Status = gRT->GetVariable ( + TCG2_VERSION_NAME, + &gTcg2ConfigFormSetGuid, + NULL, + &DataSize, + &Tcg2Version + ); if (!EFI_ERROR (Status)) { // // EFI variable does exist and validate current setting. @@ -123,13 +127,13 @@ InitializeTcg2VersionInfo ( // Get the default values from variable. // DataSize = sizeof (Tcg2Version); - Status = gRT->GetVariable ( - TCG2_VERSION_NAME, - &gTcg2ConfigFormSetGuid, - NULL, - &DataSize, - &Tcg2Version - ); + Status = gRT->GetVariable ( + TCG2_VERSION_NAME, + &gTcg2ConfigFormSetGuid, + NULL, + &DataSize, + &Tcg2Version + ); ASSERT_EFI_ERROR (Status); } } else { @@ -160,24 +164,26 @@ InitializeTcg2VersionInfo ( // Get the default values from variable. // DataSize = sizeof (Tcg2Version); - Status = gRT->GetVariable ( - TCG2_VERSION_NAME, - &gTcg2ConfigFormSetGuid, - NULL, - &DataSize, - &Tcg2Version - ); + Status = gRT->GetVariable ( + TCG2_VERSION_NAME, + &gTcg2ConfigFormSetGuid, + NULL, + &DataSize, + &Tcg2Version + ); ASSERT_EFI_ERROR (Status); if (PcdTcg2PpiVersion != Tcg2Version.PpiVersion) { DEBUG ((DEBUG_WARN, "WARNING: PcdTcgPhysicalPresenceInterfaceVer default value is not same with the default value in VFR\n")); DEBUG ((DEBUG_WARN, "WARNING: The default value in VFR has be chosen\n")); } + if (PcdTpm2AcpiTableRev != Tcg2Version.Tpm2AcpiTableRev) { DEBUG ((DEBUG_WARN, "WARNING: PcdTpm2AcpiTableRev default value is not same with the default value in VFR\n")); DEBUG ((DEBUG_WARN, "WARNING: The default value in VFR has be chosen\n")); } } } + FreePool (ConfigRequestHdr); // @@ -189,7 +195,7 @@ InitializeTcg2VersionInfo ( CopyMem ( &PcdTcg2PpiVersion, PcdGetPtr (PcdTcgPhysicalPresenceInterfaceVer), - AsciiStrSize ((CHAR8 *) PcdGetPtr (PcdTcgPhysicalPresenceInterfaceVer)) + AsciiStrSize ((CHAR8 *)PcdGetPtr (PcdTcgPhysicalPresenceInterfaceVer)) ); if (PcdTcg2PpiVersion != Tcg2Version.PpiVersion) { DEBUG ((DEBUG_WARN, "WARNING: PcdTcgPhysicalPresenceInterfaceVer is not DynamicHii type and does not map to TCG2_VERSION.PpiVersion\n")); @@ -247,8 +253,8 @@ InitializeTcg2VersionInfo ( EFI_STATUS EFIAPI Tcg2ConfigDriverEntryPoint ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable ) { EFI_STATUS Status; @@ -289,36 +295,36 @@ Tcg2ConfigDriverEntryPoint ( ); ASSERT_EFI_ERROR (Status); - Status = gBS->LocateProtocol (&gEfiTcg2ProtocolGuid, NULL, (VOID **) &PrivateData->Tcg2Protocol); + Status = gBS->LocateProtocol (&gEfiTcg2ProtocolGuid, NULL, (VOID **)&PrivateData->Tcg2Protocol); ASSERT_EFI_ERROR (Status); - PrivateData->ProtocolCapability.Size = sizeof(PrivateData->ProtocolCapability); - Status = PrivateData->Tcg2Protocol->GetCapability ( - PrivateData->Tcg2Protocol, - &PrivateData->ProtocolCapability - ); + PrivateData->ProtocolCapability.Size = sizeof (PrivateData->ProtocolCapability); + Status = PrivateData->Tcg2Protocol->GetCapability ( + PrivateData->Tcg2Protocol, + &PrivateData->ProtocolCapability + ); ASSERT_EFI_ERROR (Status); - DataSize = sizeof(Tcg2Configuration); - Status = gRT->GetVariable ( - TCG2_STORAGE_NAME, - &gTcg2ConfigFormSetGuid, - NULL, - &DataSize, - &Tcg2Configuration - ); + DataSize = sizeof (Tcg2Configuration); + Status = gRT->GetVariable ( + TCG2_STORAGE_NAME, + &gTcg2ConfigFormSetGuid, + NULL, + &DataSize, + &Tcg2Configuration + ); if (EFI_ERROR (Status)) { // // Variable not ready, set default value // - Tcg2Configuration.TpmDevice = TPM_DEVICE_DEFAULT; + Tcg2Configuration.TpmDevice = TPM_DEVICE_DEFAULT; } // // Validation // if ((Tcg2Configuration.TpmDevice > TPM_DEVICE_MAX) || (Tcg2Configuration.TpmDevice < TPM_DEVICE_MIN)) { - Tcg2Configuration.TpmDevice = TPM_DEVICE_DEFAULT; + Tcg2Configuration.TpmDevice = TPM_DEVICE_DEFAULT; } // @@ -328,21 +334,21 @@ Tcg2ConfigDriverEntryPoint ( Status = PrivateData->Tcg2Protocol->GetActivePcrBanks (PrivateData->Tcg2Protocol, &CurrentActivePCRBanks); ASSERT_EFI_ERROR (Status); PrivateData->PCRBanksDesired = CurrentActivePCRBanks; - UpdateDefaultPCRBanks (Tcg2ConfigBin + sizeof(UINT32), ReadUnaligned32((UINT32 *)Tcg2ConfigBin) - sizeof(UINT32), CurrentActivePCRBanks); + UpdateDefaultPCRBanks (Tcg2ConfigBin + sizeof (UINT32), ReadUnaligned32 ((UINT32 *)Tcg2ConfigBin) - sizeof (UINT32), CurrentActivePCRBanks); // // Sync data from PCD to variable, so that we do not need detect again in S3 phase. // Tcg2DeviceDetection.TpmDeviceDetected = TPM_DEVICE_NULL; - for (Index = 0; Index < sizeof(mTpmInstanceId)/sizeof(mTpmInstanceId[0]); Index++) { - if (CompareGuid (PcdGetPtr(PcdTpmInstanceGuid), &mTpmInstanceId[Index].TpmInstanceGuid)) { + for (Index = 0; Index < sizeof (mTpmInstanceId)/sizeof (mTpmInstanceId[0]); Index++) { + if (CompareGuid (PcdGetPtr (PcdTpmInstanceGuid), &mTpmInstanceId[Index].TpmInstanceGuid)) { Tcg2DeviceDetection.TpmDeviceDetected = mTpmInstanceId[Index].TpmDevice; break; } } PrivateData->TpmDeviceDetected = Tcg2DeviceDetection.TpmDeviceDetected; - Tcg2Configuration.TpmDevice = Tcg2DeviceDetection.TpmDeviceDetected; + Tcg2Configuration.TpmDevice = Tcg2DeviceDetection.TpmDeviceDetected; // // Save to variable so platform driver can get it. @@ -351,7 +357,7 @@ Tcg2ConfigDriverEntryPoint ( TCG2_DEVICE_DETECTION_NAME, &gTcg2ConfigFormSetGuid, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS, - sizeof(Tcg2DeviceDetection), + sizeof (Tcg2DeviceDetection), &Tcg2DeviceDetection ); if (EFI_ERROR (Status)) { @@ -373,7 +379,7 @@ Tcg2ConfigDriverEntryPoint ( TCG2_STORAGE_NAME, &gTcg2ConfigFormSetGuid, EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS, - sizeof(Tcg2Configuration), + sizeof (Tcg2Configuration), &Tcg2Configuration ); if (EFI_ERROR (Status)) { @@ -428,13 +434,13 @@ Tcg2ConfigDriverUnload ( IN EFI_HANDLE ImageHandle ) { - EFI_STATUS Status; - TCG2_CONFIG_PRIVATE_DATA *PrivateData; + EFI_STATUS Status; + TCG2_CONFIG_PRIVATE_DATA *PrivateData; Status = gBS->HandleProtocol ( ImageHandle, &gEfiCallerIdGuid, - (VOID **) &PrivateData + (VOID **)&PrivateData ); if (EFI_ERROR (Status)) { return Status;