请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:PROCESSOR-SDK-J722S 工具/软件:
你好。 TI 专家。
在查看getQC
中函数的实现时vx_tidl_target.c
、我遇到了一个可能导致超出范围内存访问的潜在问题。
例如、使用该sTIDL_IOBufDesc_t
结构计算校验和时、的值inSize
可能为189208。 在循环的最终迭代期间remSize
、如果变为24、计算elem
值可以变为40、更新后的值remSize
将为88。
因此、循环再次执行、 的地址索引 pIn
将为198212、这超出了分配的大小。
为了在功能安全方面防止这种情况发生、我认为添加一项检查会更安全、以便在remSize
最终环路中 IF 小于64、elem
应 设置为remSize
remSize
0。 这将确保pIn
绝不会访问超出有效范围的存储器。
以下是我建议实施的逻辑:
#if 1 int32_t elems = (remSize < TIVX_TIDL_J7_CHECKSUM_SIZE) ? remSize : TIVX_TIDL_J7_CHECKSUM_SIZE; remSize -= elems; #else int32_t elems; if (remSize < TIVX_TIDL_J7_CHECKSUM_SIZE) { elems = TIVX_TIDL_J7_CHECKSUM_SIZE - remSize; remSize += TIVX_TIDL_J7_CHECKSUM_SIZE; } else { elems = TIVX_TIDL_J7_CHECKSUM_SIZE; remSize -= TIVX_TIDL_J7_CHECKSUM_SIZE; } #endif
希望听到您对此的想法。 如果需要任何澄清、请告诉我。
此致、
Yongsig Do