Hi Bret I saw PR failure - https://github.com/tianocore/edk2/pull/2066
Thank you > -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Bret > Barkelew > Sent: Thursday, October 14, 2021 1:33 AM > To: devel@edk2.groups.io > Cc: Yao, Jiewen <jiewen....@intel.com>; Wang, Jian J <jian.j.w...@intel.com>; > Zhang, Qi1 <qi1.zh...@intel.com>; Kumar, Rahul1 <rahul1.ku...@intel.com> > Subject: [edk2-devel] [PATCH v2 1/1] SecurityPkg/Library: Add > Tpm2NvUndefineSpaceSpecial to Tpm2CommandLib > > Used to provision and maintain certain HW-defined NV spaces. > > REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2994 > > Signed-off-by: Bret Barkelew <bret.barke...@microsoft.com> > Reviewed-by: Jiewen Yao <jiewen....@intel.com> > Cc: Jiewen Yao <jiewen....@intel.com> > Cc: Jian J Wang <jian.j.w...@intel.com> > Cc: Qi Zhang <qi1.zh...@intel.com> > Cc: Rahul Kumar <rahul1.ku...@intel.com> > --- > SecurityPkg/Library/Tpm2CommandLib/Tpm2NVStorage.c | 122 > ++++++++++++++++++++ > SecurityPkg/Include/Library/Tpm2CommandLib.h | 22 ++++ > 2 files changed, 144 insertions(+) > > diff --git a/SecurityPkg/Library/Tpm2CommandLib/Tpm2NVStorage.c > b/SecurityPkg/Library/Tpm2CommandLib/Tpm2NVStorage.c > index 87572de20164..275cb1683f51 100644 > --- a/SecurityPkg/Library/Tpm2CommandLib/Tpm2NVStorage.c > +++ b/SecurityPkg/Library/Tpm2CommandLib/Tpm2NVStorage.c > @@ -24,6 +24,8 @@ SPDX-License-Identifier: BSD-2-Clause-Patent > #define RC_NV_UndefineSpace_authHandle (TPM_RC_H + TPM_RC_1) > > #define RC_NV_UndefineSpace_nvIndex (TPM_RC_H + TPM_RC_2) > > > > +#define RC_NV_UndefineSpaceSpecial_nvIndex (TPM_RC_H + TPM_RC_1) > > + > > #define RC_NV_Read_authHandle (TPM_RC_H + TPM_RC_1) > > #define RC_NV_Read_nvIndex (TPM_RC_H + TPM_RC_2) > > #define RC_NV_Read_size (TPM_RC_P + TPM_RC_1) > > @@ -74,6 +76,20 @@ typedef struct { > TPMS_AUTH_RESPONSE AuthSession; > > } TPM2_NV_UNDEFINESPACE_RESPONSE; > > > > +typedef struct { > > + TPM2_COMMAND_HEADER Header; > > + TPMI_RH_NV_INDEX NvIndex; > > + TPMI_RH_PLATFORM Platform; > > + UINT32 AuthSessionSize; > > + TPMS_AUTH_COMMAND AuthSession; > > +} TPM2_NV_UNDEFINESPACESPECIAL_COMMAND; > > + > > +typedef struct { > > + TPM2_RESPONSE_HEADER Header; > > + UINT32 AuthSessionSize; > > + TPMS_AUTH_RESPONSE AuthSession; > > +} TPM2_NV_UNDEFINESPACESPECIAL_RESPONSE; > > + > > typedef struct { > > TPM2_COMMAND_HEADER Header; > > TPMI_RH_NV_AUTH AuthHandle; > > @@ -506,6 +522,112 @@ Done: > return Status; > > } > > > > +/** > > + This command allows removal of a platform-created NV Index that has > TPMA_NV_POLICY_DELETE SET. > > + > > + @param[in] NvIndex The NV Index. > > + @param[in] IndexAuthSession Auth session context for the Index > auth/policy > > + @param[in] PlatAuthSession Auth session context for the Platform > auth/policy > > + > > + @retval EFI_SUCCESS Operation completed successfully. > > + @retval EFI_NOT_FOUND The command was returned successfully, but > NvIndex is not found. > > + @retval EFI_UNSUPPORTED Selected NvIndex does not support deletion > through this call. > > + @retval EFI_SECURITY_VIOLATION Deletion is not authorized by current > policy session. > > + @retval EFI_INVALID_PARAMETER The command was unsuccessful. > > + @retval EFI_DEVICE_ERROR The command was unsuccessful. > > +**/ > > +EFI_STATUS > > +EFIAPI > > +Tpm2NvUndefineSpaceSpecial ( > > + IN TPMI_RH_NV_INDEX NvIndex, > > + IN TPMS_AUTH_COMMAND *IndexAuthSession OPTIONAL, > > + IN TPMS_AUTH_COMMAND *PlatAuthSession OPTIONAL > > + ) > > +{ > > + EFI_STATUS Status; > > + TPM2_NV_UNDEFINESPACESPECIAL_COMMAND SendBuffer; > > + TPM2_NV_UNDEFINESPACESPECIAL_RESPONSE RecvBuffer; > > + UINT32 SendBufferSize; > > + UINT32 RecvBufferSize; > > + UINT8 *Buffer; > > + UINT32 IndexAuthSize, PlatAuthSize; > > + TPM_RC ResponseCode; > > + > > + // > > + // Construct command > > + // > > + SendBuffer.Header.tag = SwapBytes16(TPM_ST_SESSIONS); > > + SendBuffer.Header.commandCode = > SwapBytes32(TPM_CC_NV_UndefineSpaceSpecial); > > + > > + SendBuffer.NvIndex = SwapBytes32 (NvIndex); > > + SendBuffer.Platform = SwapBytes32 (TPM_RH_PLATFORM); > > + > > + // > > + // Marshall the Auth Sessions for the two handles. > > + Buffer = (UINT8 *)&SendBuffer.AuthSession; > > + // IndexAuthSession > > + IndexAuthSize = CopyAuthSessionCommand (IndexAuthSession, Buffer); > > + Buffer += IndexAuthSize; > > + // PlatAuthSession > > + PlatAuthSize = CopyAuthSessionCommand (PlatAuthSession, Buffer); > > + Buffer += PlatAuthSize; > > + // AuthSessionSize > > + SendBuffer.AuthSessionSize = SwapBytes32(IndexAuthSize + PlatAuthSize); > > + > > + // Update total command size. > > + SendBufferSize = (UINT32)(Buffer - (UINT8 *)&SendBuffer); > > + SendBuffer.Header.paramSize = SwapBytes32 (SendBufferSize); > > + > > + // > > + // send Tpm command > > + // > > + RecvBufferSize = sizeof (RecvBuffer); > > + Status = Tpm2SubmitCommand (SendBufferSize, (UINT8 *)&SendBuffer, > &RecvBufferSize, (UINT8 *)&RecvBuffer); > > + if (EFI_ERROR (Status)) { > > + goto Done; > > + } > > + > > + if (RecvBufferSize < sizeof (TPM2_RESPONSE_HEADER)) { > > + DEBUG ((EFI_D_ERROR, "Tpm2NvUndefineSpaceSpecial - RecvBufferSize > Error - %x\n", RecvBufferSize)); > > + Status = EFI_DEVICE_ERROR; > > + goto Done; > > + } > > + > > + ResponseCode = SwapBytes32(RecvBuffer.Header.responseCode); > > + if (ResponseCode != TPM_RC_SUCCESS) { > > + DEBUG ((EFI_D_ERROR, "Tpm2NvUndefineSpaceSpecial - responseCode - > %x\n", SwapBytes32(RecvBuffer.Header.responseCode))); > > + } > > + switch (ResponseCode) { > > + case TPM_RC_SUCCESS: > > + // return data > > + break; > > + case TPM_RC_ATTRIBUTES: > > + case TPM_RC_ATTRIBUTES + RC_NV_UndefineSpaceSpecial_nvIndex: > > + Status = EFI_UNSUPPORTED; > > + break; > > + case TPM_RC_NV_AUTHORIZATION: > > + Status = EFI_SECURITY_VIOLATION; > > + break; > > + case TPM_RC_HANDLE + RC_NV_UndefineSpaceSpecial_nvIndex: // > TPM_RC_NV_DEFINED: > > + Status = EFI_NOT_FOUND; > > + break; > > + case TPM_RC_VALUE + RC_NV_UndefineSpace_nvIndex: > > + Status = EFI_INVALID_PARAMETER; > > + break; > > + default: > > + Status = EFI_DEVICE_ERROR; > > + break; > > + } > > + > > +Done: > > + // > > + // Clear AuthSession Content > > + // > > + ZeroMem (&SendBuffer, sizeof(SendBuffer)); > > + ZeroMem (&RecvBuffer, sizeof(RecvBuffer)); > > + return Status; > > +} > > + > > /** > > This command reads a value from an area in NV memory previously defined by > TPM2_NV_DefineSpace(). > > > > diff --git a/SecurityPkg/Include/Library/Tpm2CommandLib.h > b/SecurityPkg/Include/Library/Tpm2CommandLib.h > index ee8eb622951c..92967662ce96 100644 > --- a/SecurityPkg/Include/Library/Tpm2CommandLib.h > +++ b/SecurityPkg/Include/Library/Tpm2CommandLib.h > @@ -364,6 +364,28 @@ Tpm2NvUndefineSpace ( > IN TPMS_AUTH_COMMAND *AuthSession OPTIONAL > > ); > > > > +/** > > + This command allows removal of a platform-created NV Index that has > TPMA_NV_POLICY_DELETE SET. > > + > > + @param[in] NvIndex The NV Index. > > + @param[in] IndexAuthSession Auth session context for the Index > auth/policy > > + @param[in] PlatAuthSession Auth session context for the Platform > auth/policy > > + > > + @retval EFI_SUCCESS Operation completed successfully. > > + @retval EFI_NOT_FOUND The command was returned successfully, but > NvIndex is not found. > > + @retval EFI_UNSUPPORTED Selected NvIndex does not support deletion > through this call. > > + @retval EFI_SECURITY_VIOLATION Deletion is not authorized by current > policy session. > > + @retval EFI_INVALID_PARAMETER The command was unsuccessful. > > + @retval EFI_DEVICE_ERROR The command was unsuccessful. > > +**/ > > +EFI_STATUS > > +EFIAPI > > +Tpm2NvUndefineSpaceSpecial ( > > + IN TPMI_RH_NV_INDEX NvIndex, > > + IN TPMS_AUTH_COMMAND *IndexAuthSession OPTIONAL, > > + IN TPMS_AUTH_COMMAND *PlatAuthSession OPTIONAL > > + ); > > + > > /** > > This command reads a value from an area in NV memory previously defined by > TPM2_NV_DefineSpace(). > > > > -- > 2.31.1.windows.1 > > > > -=-=-=-=-=-= > Groups.io Links: You receive all messages sent to this group. > View/Reply Online (#81922): https://edk2.groups.io/g/devel/message/81922 > Mute This Topic: https://groups.io/mt/86293842/1772286 > Group Owner: devel+ow...@edk2.groups.io > Unsubscribe: https://edk2.groups.io/g/devel/unsub [jiewen....@intel.com] > -=-=-=-=-=-= > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#82026): https://edk2.groups.io/g/devel/message/82026 Mute This Topic: https://groups.io/mt/86293842/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-