This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] PROCESSOR-SDK-J722S:[J722S] vx_tidl_target.c 的 getQC 函数中的潜在越界访问

Guru**** 2378650 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1497811/processor-sdk-j722s-j722s-potential-out-of-bounds-access-in-getqc-function-of-vx_tidl_target-c

器件型号: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应 设置为remSizeremSize0。 这将确保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

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好。

    有任何更新?

    此致

    Yongsig Do