VirtualBox

Changeset 104958 in vbox


Ignore:
Timestamp:
Jun 18, 2024 12:37:39 PM (3 months ago)
Author:
vboxsync
Message:

Devices/Trace: Some updates to the TPM trace log decoding, bugref:10701

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Trace/VBoxTraceLogDecoders.cpp

    r104940 r104958  
    213213        pHlp->pfnErrorMsg(pHlp, "Failed to decode '%s' as there is not enough space in the buffer (required %u, available %u)",
    214214                          pszItem, sizeof(uint8_t), pCtx->cbLeft);
     215        AssertFailed();
    215216        pCtx->fError = true;
    216217        return 0;
     
    231232        pHlp->pfnErrorMsg(pHlp, "Failed to decode '%s' as there is not enough space in the buffer (required %u, available %u)",
    232233                          pszItem, sizeof(uint16_t), pCtx->cbLeft);
     234        AssertFailed();
    233235        pCtx->fError = true;
    234236        return 0;
     
    251253        pHlp->pfnErrorMsg(pHlp, "Failed to decode '%s' as there is not enough space in the buffer (required %u, available %u)",
    252254                          pszItem, sizeof(uint32_t), pCtx->cbLeft);
     255        AssertFailed();
    253256        pCtx->fError = true;
    254257        return 0;
     
    262265
    263266
    264 #if 0 /* unused */
    265267static uint64_t vboxTraceLogDecodeEvtTpmDecodeCtxGetU64(PTPMDECODECTX pCtx, PRTTRACELOGDECODERHLP pHlp, const char *pszItem)
    266268{
     
    272274        pHlp->pfnErrorMsg(pHlp, "Failed to decode '%s' as there is not enough space in the buffer (required %u, available %u)",
    273275                          pszItem, sizeof(uint64_t), pCtx->cbLeft);
     276        AssertFailed();
    274277        pCtx->fError = true;
    275278        return 0;
     
    281284    return RT_BE2H_U64(u64);
    282285}
    283 #endif
    284286
    285287
     
    293295        pHlp->pfnErrorMsg(pHlp, "Failed to decode '%s' as there is not enough space in the buffer (required %u, available %u)",
    294296                          pszItem, cbBuf, pCtx->cbLeft);
     297        AssertFailed();
    295298        pCtx->fError = true;
    296299        return 0;
     
    352355#define TPM_DECODE_BUF(a_Var, a_Name, a_cb) \
    353356    const uint8_t *a_Var = vboxTraceLogDecodeEvtTpmDecodeCtxGetBuf(pCtx, pHlp, #a_Name, a_cb); \
     357    if (pCtx->fError) break
     358
     359#define TPM_DECODE_BUF_STR(a_Var, a_pszName, a_cb) \
     360    const uint8_t *a_Var = vboxTraceLogDecodeEvtTpmDecodeCtxGetBuf(pCtx, pHlp, a_pszName, a_cb); \
    354361    if (pCtx->fError) break
    355362
     
    448455        if (u16HmacSize)
    449456            pHlp->pfnPrintf(pHlp, "        abHmac:           %.*Rhxs\n", u16HmacSize, pbHmac);
     457    TPM_DECODE_END();
     458}
     459
     460
     461static void vboxTraceLogDecodeSizedBufU16(PRTTRACELOGDECODERHLP pHlp, PTPMDECODECTX pCtx, const char *pszName)
     462{
     463    TPM_DECODE_INIT();
     464        pHlp->pfnPrintf(pHlp, "        %s:\n", pszName);
     465        TPM_DECODE_U16(u16Size, u16Size);
     466        pHlp->pfnPrintf(pHlp, "            u16Size:  %u\n", u16Size);
     467        if (u16Size)
     468        {
     469            TPM_DECODE_BUF_STR(pb, pszName, u16Size);
     470            pHlp->pfnPrintf(pHlp, "            %s:\n"
     471                                  "%.*Rhxd\n", pszName, u16Size, pb);
     472        }
     473    TPM_DECODE_END();
     474}
     475
     476
     477static void vboxTraceLogDecodeSymEncDef(PRTTRACELOGDECODERHLP pHlp, PTPMDECODECTX pCtx, const char *pszName)
     478{
     479    RT_NOREF(pszName);
     480
     481    TPM_DECODE_INIT();
     482        pHlp->pfnPrintf(pHlp, "        %s:\n", pszName);
     483        TPM_DECODE_U16(u16HashAlg, u16HashAlg);
     484        pHlp->pfnPrintf(pHlp, "            u16Alg:             %s\n", vboxTraceLogDecodeEvtTpmAlgId2Str(u16HashAlg));
     485        if (u16HashAlg != TPM2_ALG_NULL)
     486        {
     487            TPM_DECODE_U16(u16KeyBits, u16KeyBits);
     488            pHlp->pfnPrintf(pHlp, "            u16KeyBits:         %u\n", u16KeyBits);
     489            TPM_DECODE_U16(u16SymMode, u16SymMode);
     490            pHlp->pfnPrintf(pHlp, "            u16SymMode:         %s\n", vboxTraceLogDecodeEvtTpmAlgId2Str(u16SymMode));
     491            /* Symmetric details are not required as of now. */
     492        }
    450493    TPM_DECODE_END();
    451494}
     
    557600
    558601
     602static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeReadPublicResp(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     603{
     604    RT_NOREF(pThis);
     605
     606    TPM_DECODE_INIT();
     607        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "OutPublic");
     608        TPM_DECODE_END_IF_ERROR();
     609        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "Name");
     610        TPM_DECODE_END_IF_ERROR();
     611        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "QualifiedName");
     612        TPM_DECODE_END_IF_ERROR();
     613    TPM_DECODE_END();
     614}
     615
     616
    559617static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeGetRandomReq(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
    560618{
    561     RT_NOREF(pThis);
    562 
    563619    TPM_DECODE_INIT();
    564620        TPM_DECODE_U16(u16RandomBytes, u16RandomBytes);
     
    622678        TPM_DECODE_END_IF_ERROR();
    623679        vboxTraceLogDecodeEvtTpmDigestValuesList(pHlp, pCtx);
     680    TPM_DECODE_END();
     681}
     682
     683
     684static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeReadClockResp(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     685{
     686    RT_NOREF(pThis);
     687
     688    TPM_DECODE_INIT();
     689        TPM_DECODE_U64(u64Time, u64Time);
     690        pHlp->pfnPrintf(pHlp, "        u64Time: %RX64\n", u64Time);
     691
     692        /* Decode TPMS_CLOCK_INFO. */
     693        TPM_DECODE_U64(u64Clock,        u64Clock);
     694        TPM_DECODE_U32(u32ResetCount,   u32ResetCount);
     695        TPM_DECODE_U32(u32RestartCount, u32RestartCount);
     696        TPM_DECODE_U8( fSafe,           fSafe);
     697        pHlp->pfnPrintf(pHlp, "        u64Clock:         %RX64\n",   u64Clock);
     698        pHlp->pfnPrintf(pHlp, "        u32ResetCount:    %u\n",      u32ResetCount);
     699        pHlp->pfnPrintf(pHlp, "        u32RestartCount:  %u\n",      u32RestartCount);
     700        pHlp->pfnPrintf(pHlp, "        fSafe:            %RTbool\n", fSafe);
     701
     702    TPM_DECODE_END();
     703}
     704
     705
     706static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeNvReadPublicReq(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     707{
     708    RT_NOREF(pThis);
     709
     710    TPM_DECODE_INIT();
     711        TPM_DECODE_U32(hNvIndex, hNvIndex);
     712        pHlp->pfnPrintf(pHlp, "        hNvIndex: %#x\n", hNvIndex);
     713    TPM_DECODE_END();
     714}
     715
     716
     717static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeNvReadPublicResp(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     718{
     719    RT_NOREF(pThis);
     720
     721    TPM_DECODE_INIT();
     722        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "NvPublic");
     723    TPM_DECODE_END();
     724}
     725
     726
     727static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeStartAuthSessionReq(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     728{
     729    RT_NOREF(pThis);
     730
     731    TPM_DECODE_INIT();
     732        TPM_DECODE_U32(hTpmKey, hTpmKey);
     733        pHlp->pfnPrintf(pHlp, "        hTpmKey:  %#x\n", hTpmKey);
     734        TPM_DECODE_U32(hBind, hBind);
     735        pHlp->pfnPrintf(pHlp, "        hBind:    %#x\n", hBind);
     736
     737        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "NonceCaller");
     738        TPM_DECODE_END_IF_ERROR();
     739        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "EncryptedSalt");
     740        TPM_DECODE_END_IF_ERROR();
     741
     742        TPM_DECODE_U8(u8SessionType, u8SessionType);
     743        pHlp->pfnPrintf(pHlp, "        u8SessionType:  %#x\n", u8SessionType);
     744
     745        vboxTraceLogDecodeSymEncDef(pHlp, pCtx, "Symmetric");
     746        TPM_DECODE_END_IF_ERROR();
     747
     748        TPM_DECODE_U16(u16HashAlg, u16HashAlg);
     749        pHlp->pfnPrintf(pHlp, "        u16HashAlg: %s\n", vboxTraceLogDecodeEvtTpmAlgId2Str(u16HashAlg));
     750    TPM_DECODE_END();
     751}
     752
     753
     754static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeStartAuthSessionResp(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     755{
     756    RT_NOREF(pThis);
     757
     758    TPM_DECODE_INIT();
     759        TPM_DECODE_U32(hSession, hSession);
     760        pHlp->pfnPrintf(pHlp, "        hSession: %#x\n", hSession);
     761        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "NonceTpm");
     762    TPM_DECODE_END();
     763}
     764
     765
     766static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeHierarchyChangeAuthReq(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     767{
     768    RT_NOREF(pThis);
     769
     770    TPM_DECODE_INIT();
     771        TPM_DECODE_U32(hAuth, hAuth);
     772        pHlp->pfnPrintf(pHlp, "        hAuth:    %#x\n", hAuth);
     773        vboxTraceLogDecodeEvtTpmAuthSession(pHlp, pCtx);
     774        TPM_DECODE_END_IF_ERROR();
     775
     776        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "NewAuth");
     777     TPM_DECODE_END();
     778}
     779
     780
     781static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeNvReadReq(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     782{
     783    RT_NOREF(pThis);
     784
     785    TPM_DECODE_INIT();
     786        TPM_DECODE_U32(hAuth, hAuth);
     787        pHlp->pfnPrintf(pHlp, "        hAuth:    %#x\n", hAuth);
     788        TPM_DECODE_U32(hNvIndex, hNvIndex);
     789        pHlp->pfnPrintf(pHlp, "        hNvIndex: %#x\n", hNvIndex);
     790
     791        vboxTraceLogDecodeEvtTpmAuthSession(pHlp, pCtx);
     792        TPM_DECODE_END_IF_ERROR();
     793
     794        TPM_DECODE_U16(u16Size,   u16Size);
     795        pHlp->pfnPrintf(pHlp, "        u16Size:   %u\n", u16Size);
     796        TPM_DECODE_U16(u16Offset, u16Offset);
     797        pHlp->pfnPrintf(pHlp, "        u16Offset: %u\n", u16Offset);
     798    TPM_DECODE_END();
     799}
     800
     801
     802static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeNvReadResp(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     803{
     804    RT_NOREF(pThis);
     805
     806    TPM_DECODE_INIT();
     807        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "Data");
     808    TPM_DECODE_END();
     809}
     810
     811
     812static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeEccParametersReq(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     813{
     814    RT_NOREF(pThis);
     815
     816    TPM_DECODE_INIT();
     817        TPM_DECODE_U16(u16CurveId, u16CurveId);
     818        pHlp->pfnPrintf(pHlp, "        u16CurveId:   %#x\n", u16CurveId);
     819    TPM_DECODE_END();
     820}
     821
     822
     823static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeEccParametersResp(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     824{
     825    RT_NOREF(pThis);
     826
     827    TPM_DECODE_INIT();
     828        TPM_DECODE_U16(u16CurveId,       u16CurveId);
     829        TPM_DECODE_U16(u16KeySize,       u16KeySize);
     830        TPM_DECODE_U16(u16KdfScheme,     u16KdfScheme);
     831        TPM_DECODE_U16(u16KdfSchemeHash, u16KdfSchemeHash);
     832        TPM_DECODE_U16(u16EccScheme,     u16EccScheme);
     833
     834        pHlp->pfnPrintf(pHlp, "        u16CurveId:       %#x\n", u16CurveId);
     835        pHlp->pfnPrintf(pHlp, "        u16KeySize:       %u\n",  u16KeySize);
     836        pHlp->pfnPrintf(pHlp, "        u16KdfScheme:     %s\n",  vboxTraceLogDecodeEvtTpmAlgId2Str(u16KdfScheme));
     837        pHlp->pfnPrintf(pHlp, "        u16KdfSchemeHash: %s\n",  vboxTraceLogDecodeEvtTpmAlgId2Str(u16KdfSchemeHash));
     838        pHlp->pfnPrintf(pHlp, "        u16EccScheme:     %s\n",  vboxTraceLogDecodeEvtTpmAlgId2Str(u16EccScheme));
     839        if (u16EccScheme != TPM2_ALG_NULL)
     840        {
     841            TPM_DECODE_U16(u16EccSchemeHash, u16EccSchemeHash);
     842            pHlp->pfnPrintf(pHlp, "        u16EccSchemeHash: %s\n",  vboxTraceLogDecodeEvtTpmAlgId2Str(u16EccSchemeHash));
     843        }
     844        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "p");
     845        TPM_DECODE_END_IF_ERROR();
     846        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "a");
     847        TPM_DECODE_END_IF_ERROR();
     848        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "b");
     849        TPM_DECODE_END_IF_ERROR();
     850        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "gX");
     851        TPM_DECODE_END_IF_ERROR();
     852        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "gY");
     853        TPM_DECODE_END_IF_ERROR();
     854        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "n");
     855        TPM_DECODE_END_IF_ERROR();
     856        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "h");
     857        TPM_DECODE_END_IF_ERROR();
     858    TPM_DECODE_END();
     859}
     860
     861
     862static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeQuoteReq(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     863{
     864    RT_NOREF(pThis);
     865
     866    TPM_DECODE_INIT();
     867        TPM_DECODE_U32(hSign, hSign);
     868        pHlp->pfnPrintf(pHlp, "        hSign:    %#x\n", hSign);
     869
     870        vboxTraceLogDecodeEvtTpmAuthSession(pHlp, pCtx);
     871        TPM_DECODE_END_IF_ERROR();
     872        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "QualifyingData");
     873        TPM_DECODE_END_IF_ERROR();
     874
     875        TPM_DECODE_U16(u16SigScheme,     u16SigScheme);
     876        pHlp->pfnPrintf(pHlp, "        u16SigScheme:     %s\n",  vboxTraceLogDecodeEvtTpmAlgId2Str(u16SigScheme));
     877        if (u16SigScheme != TPM2_ALG_NULL)
     878        {
     879            TPM_DECODE_U16(u16SigSchemeHash, u16SigSchemeHash);
     880            pHlp->pfnPrintf(pHlp, "        u16SigSchemeHash: %s\n",  vboxTraceLogDecodeEvtTpmAlgId2Str(u16SigSchemeHash));
     881        }
     882
     883        vboxTraceLogDecodePcrSelectionList(pHlp, pCtx);
     884    TPM_DECODE_END();
     885}
     886
     887
     888static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeQuoteResp(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     889{
     890    RT_NOREF(pThis);
     891
     892    TPM_DECODE_INIT();
     893        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "Quoted");
     894        TPM_DECODE_END_IF_ERROR();
     895
     896        TPM_DECODE_U16(u16SigAlg,     u16SigAlg);
     897        pHlp->pfnPrintf(pHlp, "        u16SigAlg:        %s\n",  vboxTraceLogDecodeEvtTpmAlgId2Str(u16SigAlg));
     898        if (u16SigAlg != TPM2_ALG_NULL)
     899        {
     900            TPM_DECODE_U16(u16SigAlgHash, u16SigAlgHash);
     901            pHlp->pfnPrintf(pHlp, "        u16SigAlgHash:    %s\n",  vboxTraceLogDecodeEvtTpmAlgId2Str(u16SigAlgHash));
     902        }
     903    TPM_DECODE_END();
     904}
     905
     906
     907static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeHmacMacReq(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     908{
     909    RT_NOREF(pThis);
     910
     911    TPM_DECODE_INIT();
     912        TPM_DECODE_U32(hSymKey, hSymKey);
     913        pHlp->pfnPrintf(pHlp, "        hSymKey:    %#x\n", hSymKey);
     914
     915        vboxTraceLogDecodeEvtTpmAuthSession(pHlp, pCtx);
     916        TPM_DECODE_END_IF_ERROR();
     917        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "Buffer");
     918        TPM_DECODE_END_IF_ERROR();
     919
     920        TPM_DECODE_U16(u16HashAlg,     u16HashAlg);
     921        pHlp->pfnPrintf(pHlp, "        u16HashAlg:     %s\n",  vboxTraceLogDecodeEvtTpmAlgId2Str(u16HashAlg));
     922    TPM_DECODE_END();
     923}
     924
     925
     926static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeHmacMacResp(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     927{
     928    RT_NOREF(pThis);
     929
     930    TPM_DECODE_INIT();
     931        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "OutHmacMac");
     932    TPM_DECODE_END();
     933}
     934
     935
     936static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeFlushContextReq(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     937{
     938    RT_NOREF(pThis);
     939
     940    TPM_DECODE_INIT();
     941        TPM_DECODE_U32(hFlush, hFlush);
     942        pHlp->pfnPrintf(pHlp, "        hFlush:      %#x\n", hFlush);
    624943    TPM_DECODE_END();
    625944}
     
    648967    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_CLEAR_CONTROL),
    649968    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_CLOCK_SET),
    650     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_HIERARCHY_CHANGE_AUTH),
     969    TPM_CMD_CODE_INIT(         TPM2_CC_HIERARCHY_CHANGE_AUTH,             TPMREQHDR,            TPMRESPHDR,            vboxTraceLogDecodeEvtTpmDecodeHierarchyChangeAuthReq,   NULL),
    651970    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_NV_DEFINE_SPACE),
    652971    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_PCR_ALLOCATE),
     
    6851004    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_GET_TIME),
    6861005    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_GET_SESSION_AUDIT_DIGEST),
    687     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_NV_READ),
     1006    TPM_CMD_CODE_INIT(         TPM2_CC_NV_READ,                          TPMREQHDR,             TPMRESPHDR,             vboxTraceLogDecodeEvtTpmDecodeNvReadReq,            vboxTraceLogDecodeEvtTpmDecodeNvReadResp),
    6881007    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_NV_READ_LOCK),
    6891008    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_OBJECT_CHANGE_AUTH),
     
    6921011    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_CREATE),
    6931012    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_ECDH_ZGEN),
    694     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_HMAC_MAC),
     1013    TPM_CMD_CODE_INIT(         TPM2_CC_HMAC_MAC,                         TPMREQHDR,            TPMRESPHDR,             vboxTraceLogDecodeEvtTpmDecodeHmacMacReq,            vboxTraceLogDecodeEvtTpmDecodeHmacMacResp),
    6951014    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_IMPORT),
    6961015    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_LOAD),
    697     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_QUOTE),
     1016    TPM_CMD_CODE_INIT(         TPM2_CC_QUOTE,                            TPMREQHDR,            TPMRESPHDR,             vboxTraceLogDecodeEvtTpmDecodeQuoteReq,              vboxTraceLogDecodeEvtTpmDecodeQuoteResp),
    6981017    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_RSA_DECRYPT),
    6991018    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_HMAC_MAC_START),
     
    7061025    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_ECDH_KEY_GEN),
    7071026    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_ENCRYPT_DECRYPT),
    708     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_FLUSH_CONTEXT),
     1027    TPM_CMD_CODE_INIT(         TPM2_CC_FLUSH_CONTEXT,                     TPMREQHDR,            TPMRESPHDR,             vboxTraceLogDecodeEvtTpmDecodeFlushContextReq,      NULL),
    7091028    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_LOAD_EXTERNAL),
    7101029    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_MAKE_CREDENTIAL),
    711     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_NV_READ_PUBLIC),
     1030    TPM_CMD_CODE_INIT(         TPM2_CC_NV_READ_PUBLIC,                    TPMREQHDR,            TPMRESPHDR,             vboxTraceLogDecodeEvtTpmDecodeNvReadPublicReq,      vboxTraceLogDecodeEvtTpmDecodeNvReadPublicResp),
    7121031    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_AUTHORIZE),
    7131032    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_AUTH_VALUE),
     
    7191038    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_OR),
    7201039    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_TICKET),
    721     TPM_CMD_CODE_INIT(         TPM2_CC_READ_PUBLIC,                      TPM2REQREADPUBLIC,     TPMRESPHDR,             vboxTraceLogDecodeEvtTpmDecodeReadPublicReq,        NULL),
     1040    TPM_CMD_CODE_INIT(         TPM2_CC_READ_PUBLIC,                      TPM2REQREADPUBLIC,     TPMRESPHDR,             vboxTraceLogDecodeEvtTpmDecodeReadPublicReq,        vboxTraceLogDecodeEvtTpmDecodeReadPublicResp),
    7221041    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_RSA_ENCRYPT),
    723     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_START_AUTH_SESSION),
     1042    TPM_CMD_CODE_INIT(         TPM2_CC_START_AUTH_SESSION,               TPMREQHDR,             TPMRESPHDR,             vboxTraceLogDecodeEvtTpmDecodeStartAuthSessionReq,  vboxTraceLogDecodeEvtTpmDecodeStartAuthSessionResp),
    7241043    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_VERIFY_SIGNATURE),
    725     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_ECC_PARAMETERS),
     1044    TPM_CMD_CODE_INIT(         TPM2_CC_ECC_PARAMETERS,                   TPMREQHDR,             TPMRESPHDR,             vboxTraceLogDecodeEvtTpmDecodeEccParametersReq,     vboxTraceLogDecodeEvtTpmDecodeEccParametersResp),
    7261045    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_FIRMWARE_READ),
    7271046    TPM_CMD_CODE_INIT(         TPM2_CC_GET_CAPABILITY,                   TPM2REQGETCAPABILITY,  TPM2RESPGETCAPABILITY,  vboxTraceLogDecodeEvtTpmDecodeGetCapabilityReq,     vboxTraceLogDecodeEvtTpmDecodeGetCapabilityResp),
     
    7321051    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_PCR),
    7331052    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_RESTART),
    734     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_READ_CLOCK),
     1053    TPM_CMD_CODE_INIT(         TPM2_CC_READ_CLOCK,                       TPMREQHDR,             TPMRESPHDR,             NULL,                                               vboxTraceLogDecodeEvtTpmDecodeReadClockResp),
    7351054    TPM_CMD_CODE_INIT(         TPM2_CC_PCR_EXTEND,                       TPMREQHDR,             TPMRESPHDR,             vboxTraceLogDecodeEvtTpmDecodePcrExtendReq,         NULL),
    7361055    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_PCR_SET_AUTH_VALUE),
     
    8251144    {
    8261145        uint32_t cbRespPayload = RT_BE2H_U32(pHdr->cbResp) - sizeof(*pHdr);
    827 
    828         pHlp->pfnPrintf(pHlp, "    Status code: %#x (%u bytes)\n", RT_BE2H_U32(pHdr->u32ErrCode), cbRespPayload);
     1146        uint32_t u32ErrCode    = RT_BE2H_U32(pHdr->u32ErrCode);
     1147
     1148        pHlp->pfnPrintf(pHlp, "    Status code: %#x (%u bytes)\n", u32ErrCode, cbRespPayload);
    8291149        PTPMSTATE pTpmState = (PTPMSTATE)pHlp->pfnDecoderStateGet(pHlp);
    8301150
    8311151        /* Can only decode the response buffer if we know the command code. */
    832         if (pTpmState)
     1152        if (   pTpmState
     1153            && u32ErrCode == TPM_SUCCESS)
    8331154        {
    8341155            for (uint32_t i = 0; i < RT_ELEMENTS(s_aTpmCmdCodes); i++)
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette