Merged
fix(drivers): validate bus and chip transfer buffers #1335
fix(drivers): validate bus and chip transfer buffers #1335
Merged
liuxingsenAdd on 25 days ago
liuxingsenCollaborators
25 days ago

当前PR是否有AI参与:

[x ] 否
[] 是
__1. AI Agent 平台:
__2. AI 模型:
__3. Prompt上下文 :

PR功能描述 / 为什么需要这个合入:

CAN/I2C/SMC 和通用芯片接口依赖上游长度值,短输入、短回复或非法 offset 宽度可能导致越界读取、错误移位或复制超出缓冲区。通用芯片如实返回空读回复后,EEPROM 多块读取仍按请求长度拼接,也可能构造越界复制范围。

修改方案:

  • CAN/I2C 写入先检查实际输入长度和容量;I2C 读请求使用真实命令字节长度。
  • 通用芯片读接口检查回复长度;保留 LocalBus 已提取位域的语义,避免二次掩码。
  • SMC 校验回复头、声明帧长及实际接收长度;按小端字节组合寄存器,避免未对齐读取及 32 位全掩码超宽移位。
  • EEPROM 多块拼接前检查每块实际回复是否短于请求,返回 HAS_ERR 并报告当前偏移、请求长度、实际长度;不追加不完整块,不再发起后续读取,保留此前完整前缀。
  • 增加边界回归;EEPROM 新增 6 组参数覆盖首块、中间块、末块的空回复和少 1 字节回复。修改背景、代码前后对照及 C 语言类比写入 tests/README.md。
  • 单个独立提交基于 origin/main@76bb48b06999e6428faf123176efa1742f65df5d。本 PR 按既定拆分安排不额外修改版本号和 CHANGELOG;运行时代码修复的性质如上。

验证方案:

重新编译相关测试程序及运行依赖;在私有 mount/IPC/network/PID 命名空间和临时目录内串行运行。保存逐程序 XML、原始日志、二进制哈希,以及测试前后源码树,与最终提交逐字节核对。

测试建议:

在正式 Bingo/CI 依赖和目标板上验证正常读写、EEPROM 短回复及异常传输;在实际插桩构建上运行 ASan/UBSan。本地本轮未执行完整 Bingo 构建、目标板或全仓 sanitizer 测试。

自验证报告:

  • 对应提交 b823d32ba28828a00efb535524924e84a4a986cd:重新编译成功;7 个程序、494/494 用例通过,失败/错误/跳过/禁用均为 0。包括 EEPROM 74 个用例(其中新增边界回归 6 个)、CAN 30、I2C 38、CAN 芯片 64、通用芯片 55、SMC 63、Aggregate 170。
  • 修复前:末块收到 3/4 字节的用例因实际返回 HAS_OK 而失败;首块空回复在 GDB 下于 block_read → vector::_M_range_insert → memcpy 触发 SIGSEGV。调试器自身退出码为 0,不作为测试成功依据。
  • 测试前后冻结源码树 2567765ba14eb9a5f8f0b41ef84e1c91c5b3c306,确认与最终提交源码树相同;没有将历史测试结果冒记到新代码。
  • 文件头、pre-commit、提交消息钩子和 diff 检查通过;独立只读复核未发现阻塞问题。
  • 本地 Linux 宿主为 plain、断言启用、tests=true、unidev=true,未启用 sanitizer。复用 libmcpp 缓存,头文件 checkout 为 10829fb9;缓存二进制缺少完整构建溯源,未宣称重新编译了最新 libmcpp。远端流水线按本提交 SHA 单独核实。

该PR关联的issue

fixes #760

希望检视人员了解:

这是原 !1307 拆分的总线与芯片边界主题。EEPROM 检查限定在需要固定长度复制的多块拼接处,通用 data_access 保留各协议真实回复长度;单块透传由已有上层解析器检查长度。调用方须检查错误码,不能将失败时的完整前缀当作完整读取结果。拆分背景和本轮版本安排见本分支 tests/README.md;不提交独立历史压力报告。未执行合入或批准命令。

likedislike
Pull Request has been successfully merged by openUBMC-robot.
(Thank you for liuxingsen's contribution.)
LliuxingsenCollaborators
25 days ago Created pull request, commit 4a39f97d
LliuxingsenCollaborators
25 days ago Associated issue: [任务]: 整合驱动内存边界和异步生命周期修复并完成回归验收,[任务]: 校验 CAN/I2C/BitIO/SMC 输入输出容量与帧长度,避免短读、未对齐访问和无效移位
openUBMC-robotopenUBMC-robotCollaborators
25 days ago Added label: sig/sig-component-drivers
openUBMC-robot
openUBMC-robotCollaborators
25 days ago Comments:

欢迎来到 openUBMC 社区

Hey @xiaoxinglxs , 感谢你对社区的贡献.

机器人使用手册

有关指令的使用,可以点击 说明文档 或 论坛 查看详情。开发人员可以在每个PR或Issue下方评论特定指令来触发机器人任务。您可以自助配置此仓库的 PR 合并规则,更多详情,请参阅机器人自助配置使用手册。

联系指引

有疑问可以联系 SIG: sig-component-drivers ,
维护者是: @dongyushan, @net_swift_wangchen, @sam_h1973, @u012924942, @weixin_37569011, @xiaoxinglxs ,
优秀贡献者是: @adellonzzy, @avery-j, @changxingOpenUBMC, @chenshengfan, @dli_bmc, @huangjiapei, @leessential, @net_swift_tianwen, @xiapengc1, @yelvsub .

likedislike
openUBMC-robotopenUBMC-robotCollaborators
25 days ago Added label: ai-co-authored
61 messages are collapsed here。 See more
openUBMC-robotopenUBMC-robotCollaborators
25 days ago Added label: approvedlgtm
openUBMC-robot
openUBMC-robotCollaborators
25 days ago Comments:

合入校验失败

@leessential, 当前PR不可合入,原因如下:

标签没满足合入条件
  • PR合入需要以下标签 1 lgtm, 但是当前只有0.
  • PR合入需要以下标签 1 approved, 但是当前只有0.
标签使用技巧
  • lgtm: 合并PR时必要的标签。代码仓管理人员可以通过评论 /lgtm 来添加标签。PR创建者可以通过评论 /lgtm cancel 来删除标签,但无法通过评论 /lgtm 添加标签。
  • approved: 合并PR时必要的标签。代码仓管理人员可以通过评论 /approve 来添加标签,通过评论 /approve cancel 来删除标签。
likedislike
openUBMC-robot
openUBMC-robotCollaborators
25 days ago Comments:

  • 标签 lgtm, approved 已被添加. 这意味着 leessential 已经检查过代码了. 👋
Tips
  • 如果PR还没有被合入, 请评论 /check-pr 进行检查. 😄
likedislike
openUBMC-robotopenUBMC-robotCollaborators
25 days ago Closed associated issue
openUBMC-robotopenUBMC-robotCollaborators
25 days ago Merged pull request, merge node SHA: ddc8facac20ac587d76d9057b744143dcf89076c