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.

[参考译文] CC3120MOD:API 接收传送的字节超出参数长度允许的范围、从而导致损坏

Guru**** 2563960 points
Other Parts Discussed in Thread: CC3120, CC3120MOD, UNIFLASH, CC31XXEMUBOOST

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/879784/cc3120mod-api-receive-delivering-more-bytes-than-the-parameter-length-allows-causing-corruption

器件型号:CC3120MOD
主题中讨论的其他器件:CC3120UNIFLASHCC31XXEMUBOOST

芯片编号0x31000000

固件2.1.0.1

NWP 3.99.1.

PHY 2.2.0.5

当 CC3120模块与接入点一起使用并与服务器建立连接时、使用 寻址小型缓冲区及其大小的参数调用 sl_Recv、最终返回更大数量的字节 、并且缓冲区被覆盖(损坏)后的存储器。

例如、长度为244的500个字符的缓冲区会重复返回1326、并且缓冲区和后续存储器已被覆盖(损坏看起来像真实数据)

将代码更改为具有更大的缓冲区可以解决此问题(1500个字符、选择的是 MTU 大小、并且大于观察到的接收数据长度)、从而允许代码继续并多次成功。 很显然、我希望代码能够稳健耐用、以防止收到更长的数据。

我在两个主板上进行了测试、每个主板都有一个具有上述版本的 CC3120模块、在这两个主板上都是一样的。

通过调试器中的代码进行跟踪、我没有赶上读取字节及其长度写入内存的时刻。 这与 Cortex M K64F 通过 SPI 与 CC3120MOD 进行通信有关

此 sl_Recv 行为是否为已知错误?  

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

    您好!

    您似乎没有在设备内上传任何 ServicePack。 请按照 本文所述将 ServicePack 上传到器件中。 您也可以尝试使用最新的主机驱动器-请参阅 此答案

    1月

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

    您好、Jan、

    感谢您的回复。

    由于硬件是定制的、因此尝试上传服务包时涉及一些工作。 在我承诺尝试之前、您能否告诉我服务包中是否存在您知道的特定修复(对于 sl_Recv 过度运行缓冲区)、 或者、如果更新建议是通用建议、以获取可能解决该问题的最新和最优秀版本?

    在 SDK 发行说明中、我没有注意到提到接收缓冲区溢出

    http://software-dl.ti.com/simplelink/esd/simplelink_msp432_sdk/3.40.00.05/docs/simplelink_mcu_sdk/changelog_coresdk_msp432p4_4_40_00_03.html#core-sdk-4.30.01-sep-24-2019

     SimpleLinkTm软件开发套件(SDK) Wi-FiRegistered插件似乎没有类似的发行说明页面,在服务包中,release_notes.html 没有列出以前的版本。

    Colin

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

    您好、Colin、

    我不知道 SDK 或 ServicePack 中的此类修复。 就我个人而言、您在将主机驱动程序移植到平台时遇到问题、但 SDK 和 SP 更新听起来像是最佳的消除过程。

    使用没有适当服务包的 CC3120器件是一个很糟糕的主意。 例如、没有任何 ServicePack 的设备受 KRACK 漏洞的影响、并且有许多未修复的错误和潜在的互操作性问题。

    1月

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

    您好、Jan、

    再次感谢。 发现一个漏洞是这种云的一大优势;随着我们即将投入生产、我们需要将其写入到该流程中。

    哪个数字(FW、NWP 或 PHY)指出未安装服务包? (因此我可以让微控制器软件仔细检查最低级别)

    Colin

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

    您好、Colin、

    最好的指示是 NWP 版本。

    • 您有版本:3.99.1
    • CC3x20的最新服务为:3.14.0.0
    • ServicePack 版本3.3.0.0是 SDK 1.30的一部分、自2017年3月起(这意味着您的器件版本大约已过期3年)

    1月

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

    您好、Colin、

    SimpleLink Wi-Fi 器件在 ROM 中随附固件、即您看到的版本。 服务插件本质上是存储在串行闪存中的固件补丁。 它们可通过闪存或 OTA 方法进行更新。

    我同意 Jan 的说法、即您应该使用更新的服务包进行测试、但最好知道您是如何移植主机驱动程序的。 您使用的是哪种主机驱动程序版本?  simplelink.h 中应存在 sl_driver_version 定义 您能否共享您的 user.h?

    此致、

    Sarah

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

    您好、Sarah、

    来自 simplelink.h

    #define SL_DRIVER_VERSION  "2.0.1.19"

    我已插入 user.h

    我们将尝试使用 CC3120MOD 自己的 simplelink 接口和应用程序来设置服务包。 否则、请使用 UniFlash 获取 CC31XXEMUBOOST。

    谢谢、

    Colin

    e2e.ti.com/.../2626.user.h

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

    您好、Colin、

    您的驱动程序版本极旧(SDK 1.40 - 2017年6月)。 您肯定需要更新您的驱动程序。

    请参阅 此主题。 讨论了如何在 CC31xxMOD 器件上更新 ServicePack 的可能性

    1月

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

    您好、Colin、

    您的 user.h 看起来不错、但我想确认您为 SPI 读取和 SL_Recv 传递的参数。

    我是否可以问您为何开始在旧软件包上进行开发? 我想了解我们是否需要在某个位置更新我们的文档或 Web 链接。 您可以在以下网址找到我们最新的 Wi-Fi 插件: http://www.ti.com/tool/SIMPLELINK-SDK-WIFI-PLUGIN

    此致、

    Sarah

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

    您好、Sarah、

    使用的代码是  

    /*
    从远程主机接收数据。
    
    \param Pbuffer 用于存储从
    主机接收的数据的指针。
    \param 长度 指定
    缓冲区参数指向的缓冲区的长度(以字节为单位)。
    范围:1-16000字节
    
    \成功时返回接收到的字节数量(>=0)或失败时返回-1
    */
    int16_t cc3120_socket:::receive (char * pbuffer、int16_t len){
    
    const Int16_t ret = sl_Recv (currentSockID、pbuffer、len、0);
    返回 ret;
    } 

    从 Receive_All 中使用的所有数据

    /*
    从远程主机接收所有数据。
    
    \param Pbuffer 用于存储从
    主机接收的数据的指针。
    \param 长度 缓冲器的最大长度。
    
    返回 成功时接收到的字节数(>=0)或失败时接收到的字节数
    */
    int16_t cc3120_socket::receive_all (char * pbuffer、int16_t len){
    int16_t recv = 0;
    while (recv < len){
    const Int16_t ret =接收(pbuffer + recv、len - recv);
    如果(ret < 0){
    返回-1;
    } 如果(ret =0){
    返回 recv;
    } 否则{
    recv += ret;
    }
    }
    返回 recv;
    } 

    从具有静态缓冲区 char[512](   此帖子的魔术编号、实数代码使用常量!)的 mbed 线程调用该函数。

    本质上调用 receive_all (buffer、sizeof (buffer))      

    我使用调试器验证了缓冲区和长度是否有效。 静态分析也很高兴。

    至于图书馆的年代;此产品已更新、更改了 WiFi 模块、以获得我们想要销售的国家/地区的认证。

    另一个产品已经使用 CC3120MOD、因此我们将电子产品和代码从那里提升到了该产品。 事实证明、该模块是为了适应未来的需要、只是暂时保持在复位状态、因此代码的实际运行并未超出几个简单的硬件测试证明(例如、让代码执行 google)。 该产品大约有2年的历史、因此它是使用库版本的日期。 该产品的假设是、我们继承了有效的产品代码、因此不需要更改任何内容。

    该模块现在正添加到产品寿命支持中、以解决漏洞、我们将研究如何在产品寿命长达十年时根据需要更新服务包。 当然会发生漏洞/错误、但我不知道是否有我们可以注册的位置来获得重要更新的通知。 我很高兴他们认真对待产品安全、进行严格的风险分析和笔试、但任何备份评论的内容都很有用。

    谢谢、

    Colin

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

    您好、Jan、

    我们购买了 CC31XXEMUBOOST 板、并将其连接到定制硬件上的 Tx Rx、复位和接地端。 SOP 连接到000、但似乎无关紧要(我希望它需要010)

    在 Windows 10上识别该板需要一段时间(下载大量内容并尝试更新驱动程序以识别设备)。 由于我更熟悉 Windows 设备驱动程序、我放弃了在 OSX (MacBook Pro)上尝试相同操作。

    使用 UniFlash 5.3、两个板编程为 FW 2.0.0.0、NWP 3.11.1.0和 PHY 2.2.0.6 (尽管我发现接口有点奇怪、因为我更希望使用简单的 JTAG 闪存器类型的接口)

    该模块以不变的方式运行微控制器接口、继续成功连接到我们的服务器。

    减少变通办法代码、将读取缓冲区大小从512增加到1500、并继续工作。

    减少读取缓冲区周围的防护内存也起作用。

    今天我将更详细地进行测试、并查看 CC3120 API 的微控制器代码;我还需要更新这一方面的内容。

    感谢您的帮助、它看起来很有希望、

    Coiin

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

    您好、Coiin、

    好的、请告诉我您是否有任何问题。

    上载 ServicePack/Image 时使用 UART 通过引导程序代码、因为此信息位于 SPI 闪存中。 并且通过 JTAG 对 SPI 闪存进行编程将有点困难。

    1月

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

    您好、Jan、

    在查看此问题时、我注意到您说最新的服务包为3.14

    我可以找到的最新服务包是 simplelink_cc3x20_servicepack_3.11.1.0_2.0.0.0_2.2.0.6  、即3.11

    是否有其他服务包?  

    谢谢、

    Colin

    P.S.  我发现 TI.com 网站搜索没有帮助、例如搜索"simplelink service pack"、并且没有找到服务包的实际链接

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

    您好!

    CC3220/CC3120器件的最新服务包、位于 CC32xx SDK 下。 最新 SDK 为3.40、ServicePack 版本3.14。 最新的主机驱动程序使用也可以在此处找到。 以下是 Jesu 关于 如何更新 主机驱动程序的好评论。

    是的、我同意有时很难在 TI 网站上找到相关信息。 由于我不是 TI 员工、因此我无法处理此问题。

    1月

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

    您好、Jan、

    谢谢。 您提到了 CC32xx 器件 SDK、但该硬件基于 CC3120。

    我再次检查并确认、CC32xx SDK 3.40包含服务包3.14、尽管目录结构全部为 cc32x、但其发行说明中提到 CC3120R、这是 CC3120MOD 中的器件

    难怪我没有找到它。

    我现在已经烧坏了该服务包、它似乎可以正常工作。

    再次感谢、

    Colin