【发布时间】:2020-06-10 19:47:10
【问题描述】:
在下面的函数中,我在 null 检查之前遇到了取消引用错误。在行中
SEC_KM_KEKColumn_t *pAdmin1KEKs = pTCGKS->keySet[SEC_KM_Admin1].kc;
有一个错误表明直接取消引用指针 pTCGKS。并且在行中
SEC_ASSERT_MODEL(pDefaultKS != NULL && pTCGKS != NULL);
有一个错误指出在空检查之前取消引用 (REVERSE_INULL) check_after_deref:空值检查 pTCGKS 表明它可能为空值,但已在通向检查的所有路径上取消引用。
Stat_t SEC_COD_SLOW SEC_KM_TCG_Activ(SEC_KM_TCGKeySet_t *pTCGKS, uint32_t rangesSUM, SEC_KM_DefaultKeySet_t *pDefaultKS)
{
Status_t status = STATUS_OK;
uint32_t rangeIndex = 0;
const SEC_KM_KDF_t *pDigestNID = SEC_KM_GetAnybodyDigest();
SEC_KM_KEKColumn_t *pAdmin1KEKs = pTCGKS->keySet[SEC_KM_Admin1].kc;
const SEC_KM_KDF_t *pDigestAID = SEC_KM_TCG_GetSessionCredentials();
SEC_ASSERT_DEBUG(SEC_KM_TCG_GetSessionUserID() == SEC_KM_Admin1);
SEC_ASSERT_MODEL(pDefaultKS != NULL && pTCGKS != NULL);
// Generate Key Chains for all TCG authorities for Original Opal scheme
status = SEC_KM_TCG_Generate(pTCGKS, pDigestNID, pDigestAID);
if (status != STATUS_OK)
{
return status;
}
// Rewrap SDEK from default key storage into Global Range of TCG
status = SEC_KM_RewrapSDEK(&pDefaultKS->SDEKw, &pDefaultKS->keySet.RKEKw, &pDefaultKS->keySet.PKEKw, pDigestNID,
&pTCGKS->DEK[GDEK].SDEK.w, &pAdmin1KEKs[RKEKG].w, &pAdmin1KEKs[PKEK].w, pDigestAID);
if (status != STATUS_OK)
{
return status;
}
status = SEC_KM_TCG_ConvertToSUM(pTCGKS, pDigestNID, rangesSUM);
if (status != STATUS_OK)
{
return status;
}
// After Activation all ranges are unlocked. So unwrap all SDEKs.
for (rangeIndex = 0; rangeIndex < TCG_MAX_RANGE_KEYS; rangeIndex++)
{
status = SEC_KM_TCG_UnwrapUnlockedSDEK(pTCGKS, rangeIndex);
if (status != STATUS_OK)
{
return status;
}
}
return status;
}
【问题讨论】:
-
null 检查应该在函数中第一次使用 pTCGKS 之前进行。看起来您出于某种原因将 null 传递给了函数。我们无法知道您发布的内容会发生什么。
-
听起来您将空指针作为第一个参数传递给
SEC_COD_SLOW SEC_KM_TCG_Activ。我们可以得到minimal reproducible example吗? -
有什么问题?
-
既然你标记为 C++,你应该看看“智能指针”。
-
它是 C 或 C++,不能两者兼有 - 选择一个。你把它编译成什么?
标签: c++ c pointers operating-system embedded