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.

[参考译文] CC2674R10:OAD:添加 OAD 服务时超出预期的存储器访问

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

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/1432083/cc2674r10-oad-out-of-bound-memory-access-while-adding-oad-service

器件型号:CC2674R10
主题中讨论的其他器件:CC1354P10

工具与软件:

嗨、TI 团队:

示例:basic_ble_oad_offchip_LP_EM_CC1354P10_1_tirtos7_ticlang
SDK:simplelink_cc13xx_cc26xx_sdk_7_41_00_17

使用 OAD 时、我在 OAD_AddService 中发现了一个严重问题。
GATT457.Cfg 似乎在内部迭代链接 App_Init NumConns。
因此、在外部循环中迭代 linkDBNumConns 将写入 oadCCCDTable 边界之外的内存区域、这会导致不可预测的崩溃。

此致、
托比亚斯

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

    尊敬的 Tobias:

    感谢您联系我们。 您能分享一下如何验证存储器是否超出范围吗? 我认为整个区域都是出于 OAD 的目的分配的。

    此致、

    1月

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

    您好、Jan:

    已发现使用示例中的 oad_service.c 在自定义实现中实现 OAD 时存在问题。
    我们将连接数量从8更改为2。 如果是示例代码、它可能不会崩溃、但不安全。

    为了进行验证、我使用了内存浏览器:

    连接数为2、因此 oadCCCDTable 为24字节。
    但是初始化循环会写入28个字节。

    此致、

    托比亚斯

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

    尊敬的 Tobias:

    您能解释一下自定义实施是什么意思吗? 您是否要更改随 SDK 提供的默认 OAD 方案?

    此致、

    1月

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

    您好、Jan:

    我们在定制 PCB 上使用 CC2674R10。
    因此、我们在 SYSCFG 中进行了一些基于硬件抽象的更改。
    仅从示例中提取、OAD 方案并未生效。

    如果您将 basic_ble_oad_offchip_lp_EM_CC1354P10_1_tirtos7_ticlang 的 OAD_AddService ()实现与 simple_peripheral_oad_offchip_CC26X2R1_LAUNCHXL_tirtos7_ticlang 的其他示例实现(例如 OAD_open ()进行比较、您不会找到用于初始化 CCCD 的外部循环。

    此致、
    托比亚斯

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

    尊敬的 Tobias:

    明白了、很抱歉混淆了。 这可能是 basic_ble 示例中包含的 OAD_AddService ()版本的问题。  您正在使用的 SDK 版本是包含 basic_ble 示例的最早 SDK 之一、因此使用的代码可能并不理想。 您是否可以尝试用 OAD_OPEN()中的方法替换外部循环?

    此致、

    1月

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

    您好、Jan:

    可以、但这需要将服务复制到本地空间。
    因此、最好在下一个 SDK 版本中修复该问题。

    只是为了确保你知道这个问题,并继续跟踪它...

    此致、
    托比亚斯

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

    尊敬的 Tobias:

    明白了、我会尽快向研发团队报告并提交请求单、以获取该地址。

    感谢您发送编修。 对此造成的不便、我深表歉意。

    此致、

    1月