VirtualBox

Changeset 104973 in vbox


Ignore:
Timestamp:
Jun 20, 2024 9:25:36 AM (3 months ago)
Author:
vboxsync
Message:

Devices/Trace: Updates to the TPM trace decoding, bugref:10701

File:
1 edited

Legend:

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

    r104966 r104973  
    188188    TPM_ALGID_2_STR(TPM2_ALG_KMAC128),
    189189    TPM_ALGID_2_STR(TPM2_ALG_KMAC256),
    190     { 0, NULL, 0 }
     190    RT_TRACELOG_DECODER_STRUCT_BLD_ENUM_TERM
    191191#undef TPM_ALGID_2_STR
    192192};
     
    214214        pHlp->pfnErrorMsg(pHlp, "Failed to decode '%s' as there is not enough space in the buffer (required %u, available %u)",
    215215                          pszItem, sizeof(uint8_t), pCtx->cbLeft);
    216         //AssertFailed();
     216        AssertFailed();
    217217        pCtx->fError = true;
    218218        return 0;
     
    233233        pHlp->pfnErrorMsg(pHlp, "Failed to decode '%s' as there is not enough space in the buffer (required %u, available %u)",
    234234                          pszItem, sizeof(uint16_t), pCtx->cbLeft);
    235         //AssertFailed();
     235        AssertFailed();
    236236        pCtx->fError = true;
    237237        return 0;
     
    254254        pHlp->pfnErrorMsg(pHlp, "Failed to decode '%s' as there is not enough space in the buffer (required %u, available %u)",
    255255                          pszItem, sizeof(uint32_t), pCtx->cbLeft);
    256         //AssertFailed();
     256        AssertFailed();
    257257        pCtx->fError = true;
    258258        return 0;
     
    281281        pHlp->pfnErrorMsg(pHlp, "Failed to decode '%s' as there is not enough space in the buffer (required %u, available %u)",
    282282                          pszItem, sizeof(uint64_t), pCtx->cbLeft);
    283         //AssertFailed();
     283        AssertFailed();
    284284        pCtx->fError = true;
    285285        return 0;
     
    302302        pHlp->pfnErrorMsg(pHlp, "Failed to decode '%s' as there is not enough space in the buffer (required %u, available %u)",
    303303                          pszItem, cbBuf, pCtx->cbLeft);
    304         //AssertFailed();
     304        AssertFailed();
    305305        pCtx->fError = true;
    306306        return 0;
     
    315315    pCtx->cbLeft -= cbBuf;
    316316    return pb;
    317 }
    318 
    319 
    320 static const char *vboxTraceLogDecodeEvtTpmAlgId2Str(uint16_t u16AlgId)
    321 {
    322     for (uint32_t i = 0; i < RT_ELEMENTS(g_aAlgId2Str); i++)
    323         if (g_aAlgId2Str[i].u64EnumVal == u16AlgId)
    324             return g_aAlgId2Str[i].pszString;
    325 
    326     return "<UNKNOWN>";
    327317}
    328318
     
    434424    if (pCtx->fError) break; \
    435425    if (a_Var) \
    436         pHlp->pfnStructBldAddBuf(pHlp, a_pszName, RTTRACELOG_DECODER_HLP_STRUCT_BLD_F_HEX_DUMP_STR, a_Var, a_cb);
     426        pHlp->pfnStructBldAddBuf(pHlp, a_pszName, 0 /*fFlags*/, a_Var, a_cb);
    437427
    438428#define TPM_DECODE_END_IF_ERROR() \
     
    520510static void vboxTraceLogDecodeEvtTpmAuthSessionReq(PRTTRACELOGDECODERHLP pHlp, PTPMDECODECTX pCtx)
    521511{
    522     pHlp->pfnStructBldBegin(pHlp, "AuthArea");
    523     TPM_DECODE_INIT();
    524         TPM_DECODE_U32(    u32Size,          u32Size);
     512    TPM_DECODE_INIT();
    525513        TPM_DECODE_U32_HEX(u32SessionHandle, u32SessionHandle);
    526514        TPM_DECODE_U16(    u16NonceSize,     u16NonceSize);
     
    530518        TPM_DECODE_BUF(    pbHmac,           abHmac,  u16HmacSize);
    531519    TPM_DECODE_END();
    532     pHlp->pfnStructBldEnd(pHlp);
    533520}
    534521
     
    605592    TPM_DECODE_END();
    606593    pHlp->pfnStructBldEnd(pHlp);
     594}
     595
     596
     597static void vboxTraceLogDecode_TPMT_SIGNATURE(PRTTRACELOGDECODERHLP pHlp, PTPMDECODECTX pCtx, const char *pszName)
     598{
     599    pHlp->pfnStructBldBegin(pHlp, pszName);
     600    TPM_DECODE_INIT();
     601        TPM_DECODE_U16_ENUM(u16SigningAlg, u16SigningAlg, g_aAlgId2Str);
     602        if (u16SigningAlg != TPM2_ALG_NULL)
     603        {
     604            TPM_DECODE_U16_ENUM(u16HashAlg, u16HashAlg, g_aAlgId2Str);
     605        }
     606    TPM_DECODE_END();
     607    pHlp->pfnStructBldEnd(pHlp);
     608}
     609
     610
     611static void vboxTraceLogDecode_TPMT_SIG_SCHEME(PRTTRACELOGDECODERHLP pHlp, PTPMDECODECTX pCtx, const char *pszName)
     612{
     613    pHlp->pfnStructBldBegin(pHlp, pszName);
     614    TPM_DECODE_INIT();
     615        TPM_DECODE_U16_ENUM(u16Scheme, u16Scheme, g_aAlgId2Str);
     616        if (u16Scheme != TPM2_ALG_NULL)
     617        {
     618            TPM_DECODE_U16_ENUM(u16HashAlg, u16HashAlg, g_aAlgId2Str);
     619        }
     620    TPM_DECODE_END();
     621    pHlp->pfnStructBldEnd(pHlp);
     622}
     623
     624
     625static void vboxTraceLogDecode_TPML_DIGEST(PRTTRACELOGDECODERHLP pHlp, PTPMDECODECTX pCtx, const char *pszName)
     626{
     627    pHlp->pfnStructBldBegin(pHlp, pszName);
     628    TPM_DECODE_INIT();
     629        TPM_DECODE_U32(u32Count, u32Count);
     630        for (uint32_t i = 0; i < u32Count; i++)
     631        {
     632            vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "Digest");
     633            TPM_DECODE_END_IF_ERROR();
     634        }
     635    TPM_DECODE_END();
     636    pHlp->pfnStructBldEnd(pHlp);
     637}
     638
     639
     640static void vboxTraceLogDecode_TPMS_CONTEXT(PRTTRACELOGDECODERHLP pHlp, PTPMDECODECTX pCtx, const char *pszName)
     641{
     642    pHlp->pfnStructBldBegin(pHlp, pszName);
     643    TPM_DECODE_INIT();
     644        TPM_DECODE_U64(    u64Sequence, u64Sequence);
     645        TPM_DECODE_U32_HEX(hSaved,      hSaved);
     646        TPM_DECODE_U32_HEX(hHierarchy,  hHierarchy);
     647        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "ContextBlob");
     648    TPM_DECODE_END();
     649    pHlp->pfnStructBldEnd(pHlp);
     650}
     651
     652
     653static const char *g_apszHandlesEvictControlReq[] =
     654{
     655    "hAuth",
     656    "hObj",
     657    NULL
     658};
     659
     660static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeEvictControlReq(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     661{
     662    RT_NOREF(pThis);
     663
     664    TPM_DECODE_INIT();
     665        TPM_DECODE_U32_HEX(hPersistent, hPersistent);
     666    TPM_DECODE_END();
     667}
     668
     669
     670static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeSelfTestReq(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     671{
     672    RT_NOREF(pThis);
     673
     674    TPM_DECODE_INIT();
     675        TPM_DECODE_BOOL(fFullTest, fFullTest);
     676    TPM_DECODE_END();
    607677}
    608678
     
    636706    RT_TRACELOG_DECODER_STRUCT_BLD_ENUM_INIT(TPM2_CAP_ECC_CURVES),
    637707    RT_TRACELOG_DECODER_STRUCT_BLD_ENUM_INIT(TPM2_CAP_AUTH_POLICIES),
    638     RT_TRACELOG_DECODER_STRUCT_BLD_ENUM_INIT(TPM2_CAP_ACT)
     708    RT_TRACELOG_DECODER_STRUCT_BLD_ENUM_INIT(TPM2_CAP_ACT),
     709    RT_TRACELOG_DECODER_STRUCT_BLD_ENUM_TERM
    639710};
    640711
     
    668739                break;
    669740            }
     741            case TPM2_CAP_TPM_PROPERTIES:
     742            {
     743                TPM_DECODE_U32(u32Count, u32Count);
     744                pHlp->pfnStructBldBegin(pHlp, "aProperties");
     745                for (uint32_t i = 0; i < u32Count; i++)
     746                {
     747                    TPM_DECODE_U32_HEX(u32Property, u32Property);
     748                    TPM_DECODE_U32_HEX(u32Value,    u32Value);
     749                }
     750                pHlp->pfnStructBldEnd(pHlp);
     751                break;
     752            }
     753            case TPM2_CAP_COMMANDS:
     754            {
     755                TPM_DECODE_U32(u32Count, u32Count);
     756                pHlp->pfnStructBldBegin(pHlp, "aCommands");
     757                for (uint32_t i = 0; i < u32Count; i++)
     758                {
     759                    TPM_DECODE_U32_HEX(u32CmdCode, u32CmdCode);
     760                }
     761                pHlp->pfnStructBldEnd(pHlp);
     762                break;
     763            }
     764            case TPM2_CAP_HANDLES:
     765            {
     766                TPM_DECODE_U32(u32Count, u32Count);
     767                pHlp->pfnStructBldBegin(pHlp, "aCommands");
     768                for (uint32_t i = 0; i < u32Count; i++)
     769                {
     770                    TPM_DECODE_U32_HEX(u32Handle, u32Handle);
     771                }
     772                pHlp->pfnStructBldEnd(pHlp);
     773                break;
     774            }
    670775            default:
    671776                break;
     
    778883
    779884
     885static const char *g_apszHandlesContextLoadResp[] =
     886{
     887    "hLoaded",
     888    NULL
     889};
     890
     891
     892static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeContextLoadReq(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     893{
     894    RT_NOREF(pThis);
     895
     896    TPM_DECODE_INIT();
     897        vboxTraceLogDecode_TPMS_CONTEXT(pHlp, pCtx, "Context");
     898    TPM_DECODE_END();
     899}
     900
     901
     902static const char *g_apszHandlesContextSaveReq[] =
     903{
     904    "hSave",
     905    NULL
     906};
     907
     908
     909static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeContextSaveResp(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     910{
     911    RT_NOREF(pThis);
     912
     913    TPM_DECODE_INIT();
     914        vboxTraceLogDecode_TPMS_CONTEXT(pHlp, pCtx, "Context");
     915    TPM_DECODE_END();
     916}
     917
     918
    780919static const char *g_apszHandlesNvReadPublicReq[] =
    781920{
     
    840979
    841980
     981static const char *g_apszHandlesClearReq[] =
     982{
     983    "hAuth",
     984    NULL
     985};
     986
     987
    842988static const char *g_apszHandlesHierarchyChangeAuthReq[] =
    843989{
     
    8891035        TPM_DECODE_END_IF_ERROR();
    8901036
    891         TPM_DECODE_U16(u16HashAlg, u16HashAlg);
    892         pHlp->pfnPrintf(pHlp, "        u16HashAlg: %s\n", vboxTraceLogDecodeEvtTpmAlgId2Str(u16HashAlg));
     1037        TPM_DECODE_U16_ENUM(u16HashAlg, u16HashAlg, g_aAlgId2Str);
    8931038    TPM_DECODE_END();
    8941039}
     
    10151160
    10161161
    1017 static const char *g_apszHandlesCertifyCreationReq[] =
     1162static const char *g_apszHandlesCertifyReq[] =
    10181163{
    10191164    "hSign",
     
    10221167};
    10231168
     1169static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeCertifyReq(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     1170{
     1171    RT_NOREF(pThis);
     1172
     1173    TPM_DECODE_INIT();
     1174        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "QualifyingData");
     1175        TPM_DECODE_END_IF_ERROR();
     1176
     1177        /* Decode TPMT_SIG_SCHEME+ */
     1178        TPM_DECODE_U16_ENUM(u16SigningScheme, u16SigningScheme, g_aAlgId2Str);
     1179        if (u16SigningScheme != TPM2_ALG_NULL)
     1180        {
     1181            TPM_DECODE_U16_ENUM(u16HashAlg, u16HashAlg, g_aAlgId2Str);
     1182        }
     1183    TPM_DECODE_END();
     1184}
     1185
     1186
     1187static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeCertifyResp(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     1188{
     1189    RT_NOREF(pThis);
     1190
     1191    TPM_DECODE_INIT();
     1192        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "CertifyInfo");
     1193        vboxTraceLogDecode_TPMT_SIGNATURE(pHlp, pCtx, "Signature");
     1194    TPM_DECODE_END();
     1195}
     1196
     1197
     1198static const char *g_apszHandlesCertifyCreationReq[] =
     1199{
     1200    "hSign",
     1201    "hObj",
     1202    NULL
     1203};
     1204
    10241205static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeCertifyCreationReq(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
    10251206{
     
    10441225    TPM_DECODE_INIT();
    10451226        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "CertifyInfo");
    1046 
    1047         /* Decode TPMT_SIGNATURE */
    1048         TPM_DECODE_U16_ENUM(u16SigningAlg, u16SigningAlg, g_aAlgId2Str);
    1049         TPM_DECODE_U16_ENUM(u16HashAlg, u16HashAlg, g_aAlgId2Str);
     1227        vboxTraceLogDecode_TPMT_SIGNATURE(pHlp, pCtx, "Signature");
    10501228    TPM_DECODE_END();
    10511229}
     
    12411419        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "Quoted");
    12421420        TPM_DECODE_END_IF_ERROR();
    1243 
    1244         TPM_DECODE_U16_ENUM(u16SigAlg, u16SigAlg, g_aAlgId2Str);
    1245         if (u16SigAlg != TPM2_ALG_NULL)
    1246         {
    1247             TPM_DECODE_U16_ENUM(u16SigAlgHash, u16SigAlgHash, g_aAlgId2Str);
    1248         }
     1421        vboxTraceLogDecode_TPMT_SIGNATURE(pHlp, pCtx, "Signature");
     1422    TPM_DECODE_END();
     1423}
     1424
     1425
     1426static const char *g_apszHandlesSignReq[] =
     1427{
     1428    "hKey",
     1429    NULL
     1430};
     1431
     1432
     1433static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeSignReq(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     1434{
     1435    RT_NOREF(pThis);
     1436
     1437    TPM_DECODE_INIT();
     1438        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "Digest");
     1439        TPM_DECODE_END_IF_ERROR();
     1440
     1441        vboxTraceLogDecode_TPMT_SIG_SCHEME(pHlp, pCtx, "InScheme");
     1442        vboxTraceLogDecodeTicket(pHlp, pCtx,    "Validation"); /* TPMT_TK_HASHCHECK */
     1443    TPM_DECODE_END();
     1444}
     1445
     1446
     1447static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeSignResp(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     1448{
     1449    RT_NOREF(pThis);
     1450
     1451    TPM_DECODE_INIT();
     1452        vboxTraceLogDecode_TPMT_SIGNATURE(pHlp, pCtx, "Signature");
    12491453    TPM_DECODE_END();
    12501454}
     
    12881492
    12891493
     1494static const char *g_apszHandlesImportReq[] =
     1495{
     1496    "hParent",
     1497    NULL
     1498};
     1499
     1500
     1501static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeImportReq(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     1502{
     1503    RT_NOREF(pThis);
     1504
     1505    TPM_DECODE_INIT();
     1506        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "EncryptionKey");
     1507        TPM_DECODE_END_IF_ERROR();
     1508        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "ObjectPublic");
     1509        TPM_DECODE_END_IF_ERROR();
     1510        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "Duplicate");
     1511        TPM_DECODE_END_IF_ERROR();
     1512        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "InSymSeed");
     1513        TPM_DECODE_END_IF_ERROR();
     1514        vboxTraceLogDecodeSymEncDef(pHlp, pCtx, "SymmetricAlg");
     1515    TPM_DECODE_END();
     1516}
     1517
     1518
     1519static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodeImportResp(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     1520{
     1521    RT_NOREF(pThis);
     1522
     1523    TPM_DECODE_INIT();
     1524        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "OutPrivate");
     1525        TPM_DECODE_END_IF_ERROR();
     1526    TPM_DECODE_END();
     1527}
     1528
     1529
    12901530static const char *g_apszHandlesLoadReq[] =
    12911531{
     
    13221562        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "Name");
    13231563        TPM_DECODE_END_IF_ERROR();
     1564    TPM_DECODE_END();
     1565}
     1566
     1567
     1568static const char *g_apszHandlesPolicyGetDigestReq[] =
     1569{
     1570    "hPolicySession",
     1571    NULL
     1572};
     1573
     1574
     1575static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodePolicyGetDigestResp(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     1576{
     1577    RT_NOREF(pThis);
     1578
     1579    TPM_DECODE_INIT();
     1580        vboxTraceLogDecodeSizedBufU16(pHlp, pCtx, "PolicyDigest");
     1581    TPM_DECODE_END();
     1582}
     1583
     1584
     1585static const char *g_apszHandlesPolicyAuthValueReq[] =
     1586{
     1587    "hPolicySession",
     1588    NULL
     1589};
     1590
     1591
     1592static const char *g_apszHandlesPolicyCommandCodeReq[] =
     1593{
     1594    "hPolicySession",
     1595    NULL
     1596};
     1597
     1598
     1599static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodePolicyCommandCodeReq(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     1600{
     1601    RT_NOREF(pThis);
     1602
     1603    TPM_DECODE_INIT();
     1604        TPM_DECODE_U32_HEX(u32CmdCode, u32CmdCode);
     1605    TPM_DECODE_END();
     1606}
     1607
     1608
     1609static const char *g_apszHandlesPolicyOrReq[] =
     1610{
     1611    "hPolicySession",
     1612    NULL
     1613};
     1614
     1615
     1616static DECLCALLBACK(void) vboxTraceLogDecodeEvtTpmDecodePolicyOrReq(PRTTRACELOGDECODERHLP pHlp, PTPMSTATE pThis, PTPMDECODECTX pCtx)
     1617{
     1618    RT_NOREF(pThis);
     1619
     1620    TPM_DECODE_INIT();
     1621        vboxTraceLogDecode_TPML_DIGEST(pHlp, pCtx, "HashList");
    13241622    TPM_DECODE_END();
    13251623}
     
    13411639                                                                                                 a_pfnReq, a_pfnResp }
    13421640    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_NV_UNDEFINE_SPACE_SPECIAL),
    1343     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_EVICT_CONTROL),
     1641    TPM_CMD_CODE_INIT(         TPM2_CC_EVICT_CONTROL,                     g_apszHandlesEvictControlReq,                 NULL,                               vboxTraceLogDecodeEvtTpmDecodeEvictControlReq,                  NULL),
    13441642    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_HIERARCHY_CONTROL),
    13451643    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_NV_UNDEFINE_SPACE),
    13461644    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_CHANGE_EPS),
    13471645    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_CHANGE_PPS),
    1348     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_CLEAR),
     1646    TPM_CMD_CODE_INIT(         TPM2_CC_CLEAR,                             g_apszHandlesClearReq,                        NULL,                               NULL,                                                           NULL),
    13491647    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_CLEAR_CONTROL),
    13501648    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_CLOCK_SET),
     
    13751673    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_FIELD_UPGRADE_DATA),
    13761674    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_INCREMENTAL_SELF_TEST),
    1377     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_SELF_TEST),
     1675    TPM_CMD_CODE_INIT(         TPM2_CC_SELF_TEST,                        NULL,                                          NULL,                               vboxTraceLogDecodeEvtTpmDecodeSelfTestReq,                      NULL),
    13781676    TPM_CMD_CODE_INIT(         TPM2_CC_STARTUP,                          NULL,                                          NULL,                               vboxTraceLogDecodeEvtTpmDecodeStartupShutdownReq,               NULL),
    13791677    TPM_CMD_CODE_INIT(         TPM2_CC_SHUTDOWN,                         NULL,                                          NULL,                               vboxTraceLogDecodeEvtTpmDecodeStartupShutdownReq,               NULL),
    13801678    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_STIR_RANDOM),
    13811679    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_ACTIVATE_CREDENTIAL),
    1382     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_CERTIFY),
     1680    TPM_CMD_CODE_INIT(         TPM2_CC_CERTIFY,                          g_apszHandlesCertifyReq,                       NULL,                               vboxTraceLogDecodeEvtTpmDecodeCertifyReq,                       vboxTraceLogDecodeEvtTpmDecodeCertifyResp),
    13831681    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_NV),
    13841682    TPM_CMD_CODE_INIT(         TPM2_CC_CERTIFY_CREATION,                 g_apszHandlesCertifyCreationReq,               NULL,                               vboxTraceLogDecodeEvtTpmDecodeCertifyCreationReq,               vboxTraceLogDecodeEvtTpmDecodeCertifyCreationResp),
     
    13941692    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_ECDH_ZGEN),
    13951693    TPM_CMD_CODE_INIT(         TPM2_CC_HMAC_MAC,                         g_apszHandlesHmacMacReq,                       NULL,                               vboxTraceLogDecodeEvtTpmDecodeHmacMacReq,                       vboxTraceLogDecodeEvtTpmDecodeHmacMacResp),
    1396     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_IMPORT),
     1694    TPM_CMD_CODE_INIT(         TPM2_CC_IMPORT,                           g_apszHandlesImportReq,                        NULL,                               vboxTraceLogDecodeEvtTpmDecodeImportReq,                        vboxTraceLogDecodeEvtTpmDecodeImportResp),
    13971695    TPM_CMD_CODE_INIT(         TPM2_CC_LOAD,                             g_apszHandlesLoadReq,                          g_apszHandlesLoadResp,              vboxTraceLogDecodeEvtTpmDecodeLoadReq,                          vboxTraceLogDecodeEvtTpmDecodeLoadResp),
    13981696    TPM_CMD_CODE_INIT(         TPM2_CC_QUOTE,                            g_apszHandlesQuoteReq,                         NULL,                               vboxTraceLogDecodeEvtTpmDecodeQuoteReq,                         vboxTraceLogDecodeEvtTpmDecodeQuoteResp),
     
    14001698    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_HMAC_MAC_START),
    14011699    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_SEQUENCE_UPDATE),
    1402     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_SIGN),
     1700    TPM_CMD_CODE_INIT(         TPM2_CC_SIGN,                             g_apszHandlesSignReq,                          NULL,                               vboxTraceLogDecodeEvtTpmDecodeSignReq,                          vboxTraceLogDecodeEvtTpmDecodeSignResp),
    14031701    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_UNSEAL),
    14041702    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_SIGNED),
    1405     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_CONTEXT_LOAD),
    1406     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_CONTEXT_SAVE),
     1703    TPM_CMD_CODE_INIT(         TPM2_CC_CONTEXT_LOAD,                     NULL,                                          g_apszHandlesContextLoadResp,       vboxTraceLogDecodeEvtTpmDecodeContextLoadReq,                   NULL),
     1704    TPM_CMD_CODE_INIT(         TPM2_CC_CONTEXT_SAVE,                     g_apszHandlesContextSaveReq,                   NULL,                               NULL,                                                           vboxTraceLogDecodeEvtTpmDecodeContextSaveResp),
    14071705    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_ECDH_KEY_GEN),
    14081706    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_ENCRYPT_DECRYPT),
    1409     TPM_CMD_CODE_INIT(         TPM2_CC_FLUSH_CONTEXT,                     g_apszHandlesFlushContextReq,                 NULL,                               NULL,                                                           NULL),
     1707    TPM_CMD_CODE_INIT(         TPM2_CC_FLUSH_CONTEXT,                    g_apszHandlesFlushContextReq,                  NULL,                               NULL,                                                           NULL),
    14101708    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_LOAD_EXTERNAL),
    14111709    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_MAKE_CREDENTIAL),
    1412     TPM_CMD_CODE_INIT(         TPM2_CC_NV_READ_PUBLIC,                    g_apszHandlesNvReadPublicReq,                 NULL,                               NULL,                                                           vboxTraceLogDecodeEvtTpmDecodeNvReadPublicResp),
     1710    TPM_CMD_CODE_INIT(         TPM2_CC_NV_READ_PUBLIC,                   g_apszHandlesNvReadPublicReq,                  NULL,                               NULL,                                                           vboxTraceLogDecodeEvtTpmDecodeNvReadPublicResp),
    14131711    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_AUTHORIZE),
    1414     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_AUTH_VALUE),
    1415     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_COMMAND_CODE),
     1712    TPM_CMD_CODE_INIT(         TPM2_CC_POLICY_AUTH_VALUE,                g_apszHandlesPolicyAuthValueReq,               NULL,                               NULL,                                                           NULL),
     1713    TPM_CMD_CODE_INIT(         TPM2_CC_POLICY_COMMAND_CODE,              g_apszHandlesPolicyCommandCodeReq,             NULL,                               vboxTraceLogDecodeEvtTpmDecodePolicyCommandCodeReq,             NULL),
    14161714    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_COUNTER_TIMER),
    14171715    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_CP_HASH),
    14181716    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_LOCALITY),
    14191717    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_NAME_HASH),
    1420     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_OR),
     1718    TPM_CMD_CODE_INIT(         TPM2_CC_POLICY_OR,                        g_apszHandlesPolicyOrReq,                      NULL,                               vboxTraceLogDecodeEvtTpmDecodePolicyOrReq,                      NULL),
    14211719    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_TICKET),
    14221720    TPM_CMD_CODE_INIT(         TPM2_CC_READ_PUBLIC,                      g_apszHandlesReadPublicReq,                    NULL,                               NULL,                                                           vboxTraceLogDecodeEvtTpmDecodeReadPublicResp),
     
    14411739    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_PHYSICAL_PRESENCE),
    14421740    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_DUPLICATION_SELECT),
    1443     TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_POLICY_GET_DIGEST),
     1741    TPM_CMD_CODE_INIT(         TPM2_CC_POLICY_GET_DIGEST,                g_apszHandlesPolicyGetDigestReq,                NULL,                               NULL,                                                          vboxTraceLogDecodeEvtTpmDecodePolicyGetDigestResp),
    14441742    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_TEST_PARMS),
    14451743    TPM_CMD_CODE_INIT_NOT_IMPL(TPM2_CC_COMMIT),
     
    15181816                /* Decode authorization area if available. */
    15191817                if (u16Tag == TPM2_ST_SESSIONS)
    1520                     vboxTraceLogDecodeEvtTpmAuthSessionReq(pHlp, pCtx);
     1818                {
     1819                    size_t cbAuthArea = 0;
     1820                    TPM_DECODE_INIT();
     1821                        TPM_DECODE_U32(u32AuthSize, u32AuthSize);
     1822                        cbAuthArea = u32AuthSize;
     1823                    TPM_DECODE_END();
     1824
     1825                    if (cbAuthArea)
     1826                    {
     1827                        const uint8_t *pb = vboxTraceLogDecodeEvtTpmDecodeCtxGetBuf(pCtx, pHlp, "AuthArea", cbAuthArea);
     1828                        if (!pCtx->fError)
     1829                        {
     1830                            TPMDECODECTX CtxAuth;
     1831                            vboxTraceLogDecodeEvtTpmDecodeCtxInit(&CtxAuth, pb, cbAuthArea);
     1832
     1833                            pHlp->pfnStructBldBegin(pHlp, "AuthArea");
     1834                            while (   CtxAuth.cbLeft
     1835                                   && !CtxAuth.fError)
     1836                                vboxTraceLogDecodeEvtTpmAuthSessionReq(pHlp, &CtxAuth);
     1837                            pHlp->pfnStructBldEnd(pHlp);
     1838                        }
     1839                    }
     1840                }
    15211841
    15221842                /* Decode parameters. */
     
    15291849
    15301850                if (pCtx->cbLeft)
    1531                     pHlp->pfnPrintf(pHlp, "    Leftover undecoded data:\n"
    1532                                           "%.*Rhxd\n", pCtx->cbLeft, pCtx->pbBuf);
     1851                    pHlp->pfnStructBldAddBuf(pHlp, "Leftover undecoded data", 0 /*fFlags*/, pCtx->pbBuf, pCtx->cbLeft);
    15331852
    15341853                pHlp->pfnStructBldEnd(pHlp);
     
    15781897                {
    15791898                    /* Decode the handle area. */
     1899                    uint32_t cHandles = 0;
    15801900                    if (s_aTpmCmdCodes[i].papszHandlesResp)
    15811901                    {
     
    15871907                            TPM_DECODE_U32_HEX_STR(u32Hnd, *papszHnd);
    15881908                            papszHnd++;
     1909                            cHandles++;
    15891910                        }
    15901911
     
    15921913                    }
    15931914
     1915                    size_t cbParams = cbRespPayload - cHandles * sizeof(uint32_t);
    15941916                    if (u16Tag == TPM2_ST_SESSIONS)
    15951917                    {
    15961918                        TPM_DECODE_INIT();
    15971919                            TPM_DECODE_U32(u32ParamSz, u32ParamSize);
     1920                            cbParams = u32ParamSz;
    15981921                        TPM_DECODE_END();
    15991922                    }
    16001923
    16011924                    /* Decode parameters. */
    1602                     if (s_aTpmCmdCodes[i].pfnDecodeResp)
     1925                    if (   s_aTpmCmdCodes[i].pfnDecodeResp
     1926                        && cbParams)
    16031927                    {
    1604                         pHlp->pfnStructBldBegin(pHlp, "Parameters");
    1605                         s_aTpmCmdCodes[i].pfnDecodeResp(pHlp, pTpmState, pCtx);
    1606                         pHlp->pfnStructBldEnd(pHlp);
     1928                        const uint8_t *pb = vboxTraceLogDecodeEvtTpmDecodeCtxGetBuf(pCtx, pHlp, "Parameters", cbParams);
     1929                        if (!pCtx->fError)
     1930                        {
     1931                            TPMDECODECTX CtxParams;
     1932                            vboxTraceLogDecodeEvtTpmDecodeCtxInit(&CtxParams, pb, cbParams);
     1933
     1934                            pHlp->pfnStructBldBegin(pHlp, "Parameters");
     1935                            s_aTpmCmdCodes[i].pfnDecodeResp(pHlp, pTpmState, &CtxParams);
     1936
     1937                            if (CtxParams.cbLeft)
     1938                                pHlp->pfnStructBldAddBuf(pHlp, "Leftover undecoded data", 0 /*fFlags*/, CtxParams.pbBuf, CtxParams.cbLeft);
     1939                            pHlp->pfnStructBldEnd(pHlp);
     1940                        }
    16071941                    }
    16081942
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