已关闭
fix: 修复 LSI 日志拷贝异常路径内存泄漏 #1391
fix: 修复 LSI 日志拷贝异常路径内存泄漏 #1391
已关闭
liuxingsen创建于 13 天前关闭于 13 天前
liuxingsen成员
13 天前

当前PR是否有AI参与:

[ ] 否

[x] 是
__1. AI Agent 平台: OpenAI Codex,执行端版本 0.155.1(会话记录核实)。
__2. AI 模型: gpt-6-astra。
__3. Prompt上下文 : 原任务定位并修复驱动边界或资源生命周期问题;本轮复核九项修复,按问题类型整合为三个 PR,迁移问题和验收范围,并关闭冗余跟踪项。

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

getPdLog 返回后立即由带 g_free deleter 的 unique_ptr 接管缓冲区,覆盖失败返回和 vector::assign 异常展开路径。

本 PR 的有效修改已迁入 PR !1397(提交 9400607474e39a1b07f7591d0bc065779a094d7d),统一由 Issue #859 跟踪。本项关闭表示归并去重,未合入主线,也不表示缺陷已在主线修复。

修改方案:

保留本 PR 原提交 1cc905c26d89fc0e1dedae745a2c504b2dcd5d71 供追溯。最终方案、补充修复与测试代码见 PR !1397,本分支不再继续修改。

验证方案:

按替代 PR 的验证方案检查完整整合内容,并按提交 SHA 区分原验证与本轮验证。

测试建议:

以替代 PR 的边界、销毁交错、异常路径测试建议为准;未执行的场景在其验证结果一节单独列明。

自验证报告:

2026-10-24 已核对替代 PR 的远端提交为 9400607474e39a1b07f7591d0bc065779a094d7d,只有一个提交;已核实描述模板、AI 元数据、Issue 双向关联及 close_related_issue=true。

本轮执行的代码验证见替代 PR 自验证报告,结果对应替代提交,不冒称对本分支原提交重新验证。原 PR 的历史自述保留在平台编辑历史及本轮审计记录中,未将历史全量构建报告当作本次验证结果。本分支原提交缺少 AI trailer,保留原 SHA 作为归档;实际待合入的替代提交已包含 Co-Authored-By: gpt-6-astra。

该PR关联的issue

fixes #853

希望检视人员了解:

本 PR 的有效修改已迁入 PR !1397(提交 9400607474e39a1b07f7591d0bc065779a094d7d),统一由 Issue #859 跟踪。本项关闭表示归并去重,未合入主线,也不表示缺陷已在主线修复。

本 PR 不再申请合入;有效检视意见已纳入替代实现,尚未完成实际整改的意见保持原状态,不能以关闭 PR 代替意见解决。

likedislike
当前Pull Request已关闭, 关闭人@liuxingsen
Lliuxingsen成员
13 天前 创建了 pull request,commit 6d805cbf
Lliuxingsen成员
13 天前 关联了issue:[任务]: LSI 日志拷贝异常路径泄漏 storelib 缓冲区
openUBMC-robotopenUBMC-robot成员
13 天前 添加了label:sig/sig-component-drivers
openUBMC-robot
openUBMC-robot成员
13 天前 评论:

欢迎来到 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-robot成员
13 天前 添加了label:openUBMC-cla/yes
openUBMC-robot
openUBMC-robot成员
13 天前 评论:

CLA 签署成功

xiaoxinglxs, 感谢您的代码贡献。 所有的代码贡献者都已完成了 CLA 签署。 👍

likedislike
openUBMC-robotopenUBMC-robot成员
13 天前 添加了label:needs-issue
openUBMC-robot
openUBMC-robot成员
13 天前 评论:

关联 Issue 通知

@xiaoxinglxs , 提交的PR需要关联issue,指导链接:https://forum.openubmc.cn/t/topic/208
如果已经关联了issue, 但是needs-issue标签仍然存在,你可以在评论 /check-issue 来移除它。

likedislike
openUBMC-robot
openUBMC-robot成员
13 天前 评论:

/ai review

likedislike
openUBMC-robot
openUBMC-robot成员
13 天前 评论:

The pipeline(pipeline number:4508) is running. >>> Check Pipeline <<<.Please wait a moment...

likedislike
atomgit-bot
atomgit-bot成员
13 天前 评论:

代码审查

✅ 未发现问题

likedislike
不准确?
openUBMC-robotopenUBMC-robot成员
13 天前 添加了label:ci-running
openubmc-ci-bot成员13 天前进行代码检视1
drivers/pcie_raid_card/lsi/interface/storage/drive/status.cpp
@@ -672,2 +673,3 @@
672673 
673- gint32 ret = m_smlLib->getPdLog(m_ctrlId, m_deviceId, &pdInfo, &pdLogData);
674+ gint32 ret = m_smlLib->getPdLog(m_ctrlId, m_deviceId, &pdInfo, &pdLogData);
675+ std::unique_ptr<guint8, decltype(&g_free)> logDataOwner(pdLogData.data, &g_free);
openubmc-ci-bot13 天前评论:

💡 建议:可考虑更紧凑的 deleter 以缩小 unique_ptr 体积

当前 std::unique_ptr<guint8, decltype(&g_free)> 使用了函数指针 deleter(&g_free),每个 unique_ptr 对象在栈上会多占用一个函数指针的大小(共 16 字节)。功能上完全正确(data 为 null 时 deleter 是合法函数指针,不会触发空 deleter 的 UB),仅属轻微的空间优化。

修复建议(可选,非阻断):改用无状态 lambda deleter,使 unique_ptr 只包含一个指针大小:

auto deleter = [](guint8* p) { g_free(p); };
std::unique_ptr<guint8, decltype(deleter)> logDataOwner(pdLogData.data, deleter);

或者保持现状亦可,这不影响正确性。

likedislike
openubmc-ci-bot成员
13 天前 评论:

人工检视报告

感谢 @xiaoxinglxs 的贡献!本次变更将 CollectDriveLog 中 pdLogData.data 的手动 g_free 释放改为通过 std::unique_ptr 的 RAII 接管,确保所有退出路径(含 vector::assign 抛异常展开路径)都能正确释放缓冲区,修复了潜在的 LSI 日志拷贝异常路径内存泄漏。整体实现干净、正确,值得肯定。

📋 检视概览

项目 详情
评级 良好
严重问题 0
警告 0
建议 1

需关注的问题(已关联代码行)

# 文件 行 级别 说明
1 drivers/pcie_raid_card/lsi/interface/storage/drive/status.cpp 675 💡 建议 decltype(&g_free) 使 unique_ptr 携带函数指针 deleter,体积为 16 字节;可用无状态 lambda 缩小为一个指针。纯优化,非阻断

结论

变更逻辑正确:

  • SML_PD_LOG_DATA_S.data 为 guint8*,std::unique_ptr<guint8, decltype(&g_free)> 类型及 deleter 匹配;
  • data == nullptr 时 deleter 为合法函数指针,析构无 UB;
  • g_free 与 storelib 分配方式一致,且成功/失败路径均恰好释放一次,无双重释放、无泄漏;
  • logDataOwner != nullptr 保护了 null 访问,拷贝长度与改动前一致。

建议合并。唯一可选的优化是 deleter 的体积(见行内评论),不影响功能。

P.S. 行内评论中的 rawData.assign 长度受 data_length 控制,若 storelib 对该字段填写的值大于实际分配字节数会越界读取——此为改动前已存在的行为,不在本次 diff 范围内,仅供参考。

likedislike
openUBMC-robotopenUBMC-robot成员
13 天前 删除了label:ci-running
openUBMC-robot
openUBMC-robot成员
13 天前 评论:
任务名称结果
pre-commit检查✅SUCCESS
PR描述检查❌FAILED
防投毒检查✅SUCCESS
开源合规检查✅SUCCESS
编译构建✅SUCCESS
UT测试✅SUCCESS
头文件检查✅SUCCESS
AI Review✅SUCCESS
ASAN检测✅SUCCESS
likedislike
openUBMC-robotopenUBMC-robot成员
13 天前 添加了label:ci-failed
openUBMC-robotopenUBMC-robot成员
13 天前 添加了label:unresolved-reviews
openUBMC-robot
openUBMC-robot成员
13 天前 评论:

注意

当前PR有 1 条评论意见. 其中 1 条未处理完毕. 全部处理完后, 请评论 /check-pr 进行检查. 😄

likedislike
openUBMC-robot
openUBMC-robot成员
13 天前 评论:

注意

当前PR有 1 条评论意见. 其中 1 条未处理完毕. 全部处理完后, 请评论 /check-pr 进行检查. 😄

likedislike
Lliuxingsen成员
13 天前 修改了pull request 的描述
Lliuxingsen成员
13 天前 关闭了 pull request
openUBMC-robotopenUBMC-robot成员
13 天前 添加了label:ai-co-authored
openUBMC-robotopenUBMC-robot成员
13 天前 添加了label:ai-includes-code
openUBMC-robotopenUBMC-robot成员
13 天前 添加了label:ai-compliance-failed
openUBMC-robot
openUBMC-robot成员
13 天前 评论:

AI Declaration Check Failed

@xiaoxinglxs, AI declaration is not compliant. AI tool: Codex

Please check:

  1. The AI tool and model declared in the PR description must be real.
  2. Commit messages must include the AI model, and it must be consistent with the PR description.

Details: AI Coding Assistants. ⚠️

likedislike
Lliuxingsen成员
13 天前 修改了pull request 的描述