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.

[参考译文] CANFD-AM263X:MCU-PLUS-SDK 驱动程序:CANFD_isDataSizeValid() 函数可导致超出范围的内存访问

Guru**** 2695575 points

Other Parts Discussed in Thread: SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1584793/mcu-plus-sdk-am263x-canfd-drivers-canfd_isdatasizevalid-function-can-lead-to-out-of-bounds-memory-access

器件型号:MCU-PLUS-SDK AM263X-AM263X
主题: SysConfig 中讨论的其他器件

函数  CANFD_isDataSizeValid () 包含可能导致越界存储器访问的实现错误。

int32_t CANFD_isDataSizeValid (uint32_t dataSize)

  uint32_t canfdDataSize[CANFD_MAX_DLC_mapping ]=
          {0U、1U、2U、3U、4U、 5U、6U、7U、8U、
           12U、16U、20U、24U、32U、 48u、64u};

  if ((canfdDataSize[dataSize]== 0u)||
    (canfdDataSize[dataSize]== 1U)||
    (canfdDataSize[dataSize]== 2U)||
    (canfdDataSize[dataSize]== 3u)||
    (canfdDataSize[dataSize]== 4u)||
    (canfdDataSize[dataSize]== 5u)||
    (canfdDataSize[dataSize]== 6u)||
    (canfdDataSize[dataSize]== 7U)||
    (canfdDataSize[dataSize]== 8u)||
    (canfdDataSize[dataSize]== 12U)||
    (canfdDataSize[dataSize]== 16u)||
    (canfdDataSize[dataSize]== 20u)||
    (canfdDataSize[dataSize]== 24u)||
    (canfdDataSize[dataSize]== 32u)||
    (canfdDataSize[dataSize]== 48u)||
    (canfdDataSize[dataSize]== 64u))
  {
    返回 SystemP_Success;
  }

  返回 SystemP_FAILURE;
}
 
该函数错误地使用了输入参数 DataSize 作为的索引 canfdDataSize[] 数组中。 不过、 DataSize 表示 CAN FD 帧中的字节数、范围为 0 至 64。 canfdDataSize[] 数组只包含 16 个元素、因此传递 a  DataSize 大于 15 的值会导致访问超出数组边界的存储器。

以下是该功能的正确实现:

int32_t CANFD_isDataSizeValid (uint32_t dataSize)

  uint32_t canfdDataSize[CANFD_MAX_DLC_mapping ]=  
          {0U、1U、2U、3U、4U、 5U、6U、7U、8U、
           12U、16U、20U、24U、32U、 48u、64u};

  if ((canfdDataSize[0U]== dataSize)||  
    (canfdDataSize[1U]== dataSize)||
    (canfdDataSize[CU]== dataSize)||
    (canfdDataSize[3U]== dataSize)||
    (canfdDataSize[4U]== dataSize)||
    (canfdDataSize[5U]== dataSize)||
    (canfdDataSize(6U]== dataSize)||
    (canfdDataSize[7U]== dataSize)||
    (canfdDataSize[8U]== dataSize)||
    (canfdDataSize[9U]== dataSize)||
    (canfdDataSize[10U]== dataSize)||
    (canfdDataSize[11U]== dataSize)||
    (canfdDataSize[12U]== dataSize)||
    (canfdDataSize[13U]== dataSize)||
    (canfdDataSize[14U]== dataSize)||
    (canfdDataSize[15U]== dataSize))
  {
    返回 SystemP_Success;
  }

  返回 SystemP_FAILURE;
}

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

    您好 Davide、

    这是一个有效的问题、已在最新的 SDK 版本 11.00 中修复。 您可以升级到最新的 SDK 并试用吗?

    此致、
    Aswathi

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

    尊敬的 Aswathi:
    尚未针对  AM263x 发布 SDK 发行版本 11.0。 最新的可用版本是  10.02.00.13(适用于 AM263x 的 MCU+ SDK)

    此致、
    Davide

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

    尊敬的 Davide:

    请使用此链接下载: https://www.ti.com/tool/download/MCU-PLUS-SDK AM263X-X/11.00.00.19

    我会检查为什么它没有显示在 dev.ti.com 上、然后返回给您。  

    此致、
    Aswathi

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

    尊敬的 Aswathi:
    SDK 发行版 11.0 似乎与 CCS 20.3.1 不兼容。

    在编译结束时、我收到以下错误:

    [106]Node:internal/modules/CJS/loader:1078
    [107] throw err;
    [108]^

    [109]错误:找不到模块'C:\ti\mcu_plus_sdk_am263x_11_00_00_19\tools\boot\out2rprc\elf2rprc.js
    [110]位于 Module._resolveFilename(节点:内部/模块/CJS/loader:1075:15)
    [111]位于 Module._load(节点:internal/modules/CJS/loader:920:27)
    [112]在 function.executeUserEntryPoint [作为 runMain](节点:内部/模块/RUN_MAIN:81:12)
    [113] at node:internal/main/run_main_module:23:47{
    [114]代码:“MIDULE_NOT_FOUND “、
    [115]需要堆栈:[]
    [116]}

    [117]Node.js v18.16.0
    [118]gmake[3]:***[makefile_ccs_bootimage_gen:88:all]错误 1.
    [119]gmake[2]:[Makefile:168:post-build]错误 2(已忽略)


    您能否提供从 SDK 版本 10 到版本 11 的迁移过程?

    此致、
    Davide

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

    您好、
    您能否告诉我这是一个什么示例?如果您对 makefile_ccs_bootimage_gen 文件进行了任何修改? 从错误日志中、我看到它正在尝试读取 elf2rprpc.js 文件、但我们已弃用 SDK 11.00 中捕获的所有 RPRC 工具: https://software-dl.ti.com/mcu-plus-sdk/esd/AM263X/11_00_00_19/exports/docs/api_guide_am263x/RELEASE_NOTES_11_00_00_PAGE.html

    此致、
    Aswathi

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

    尊敬的 Aswathi:
    安装新的 SDK  版本后、我只更改了  示例工程中的产品依赖项 ( canfd_external_read_write_am263x-cc_r5fss0-0_nortos_ti-arm-clang ) 并尝试构建。


    请提供将工程从 SDK 版本 10 迁移到版本 11 的过程。

    此致、

    Davide

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

    尊敬的 Davide:

    此屏幕截图是在更新之前还是之后? 因为我看到产品已经过时了。 SysConfig 版本需要为 1.25、MCU+ SDK 需要为 11.00.00
    请确认您是否已下载以下最新工具: https://software-dl.ti.com/mcu-plus-sdk/esd/AM263X/latest/exports/docs/api_guide_am263x/RELEASE_NOTES_11_00_00_PAGE.html#autotoc_md436



    此致、
    Aswathi

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

    尊敬的 Aswathi:
    这是更新前的屏幕。 我下载了最新的工具并将 SysConfig 更新至版本 1.25、将 MCU+ SDK 更新至版本 11.00.00、将编译器 TI Clang 更新至版本 4.0.3 LTS。

    此致、

    Davide

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

    尊敬的 Davide:
    错误消息是否仍与工具更新前的相同?

    此致、
    Aswathi

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

    尊敬的 Aswathi:

    我仍然收到相同的错误消息。

    此致、

    Davide

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

    尊敬的 Davide:

    请查看 SDK 中的 imports.mak 文件、并确认工具已安装。

    SDK 11.0 使用 CCS20.3、如果您使用的是 2031、请更新 imports.mak 文件或根据依赖项使用版本。

    我也尝试使用 2031、我看不到错误、如果您仍然看到错误、请尽可能共享您的工程。