【发布时间】:2020-09-30 06:25:52
【问题描述】:
我正在尝试编写应该返回 uint32_t 的函数,但我遇到了越界读取错误,这意味着它正在从错误的内存中读取。 错误在 sumOfKey += aonEfuse->eFuseBitArray.secFAKEK[keyIndex];并且错误状态 overrun-local:使用索引 keyIndex(计算结果为 8)在元素索引 8(字节偏移 35)处的 8 个 4 字节元素的溢出数组 aonEfuse->eFuseBitArray.secFAKEK。请注意,secFAKEK 定义为:
uint32_t secFAKEK[EFUSE_SEC_FAKEK_SIZE_WORDS];
SEC_KM_AES_KEY_SIZE_IN_BYTES = 32
另外,EFUSE_SEC_FAKEK_SIZE_WORDS = 0x08
uint32_t SEC_CODE_SLOW SEC_KM_GetFAKEKVersion(void)
{
uint64_t sumOfKey = 0;
uint32_t keyIndex = 0;
const uint32_t keySizeDwords = SEC_KM_AES_KEY_SIZE_IN_BYTES / sizeof(uint32_t);
AON_eFuseData_t *aonEfuse = SYS_GetAONeFuseData();
if (!aonEfuse)
{
return MAX_UINT32;
}
while (keyIndex++ < keySizeDwords)
{
sumOfKey += aonEfuse->eFuseBitArray.secFAKEK[keyIndex];
}
return sumOfKey == 0 ? 0 : ((sumOfKey == 0xFFFFFFFFULL * keySizeDwords) ? 2 : 1);
}
【问题讨论】:
标签: c++ c security bitmap operating-system