已合并
fix: 回合acllog接口moduleId校验及文档示例 #3611
fix: 回合acllog接口moduleId校验及文档示例 #3611
已合并
zhangjie创建于 7月13日
zhangjie
zhangjie成员
7月13日

Pull Request

描述

将 master 已合入的 #715 和 #718 回合到 9.1.0 分支:

  • 补充 acllogVaList 接口调用示例。
  • 修复 acllogRecord/acllogVaList 中 moduleId 非法范围校验,拒绝负数和大于 65535 的值,并补充 UT。

变更类型

请选择本次引入的变更类型:

关联的Issue

https://gitcode.com/cann/runtime/issues/715
https://gitcode.com/cann/runtime/issues/718

如何测试

描述测试此变更的步骤和前提条件:

  1. 已执行 git diff --check upstream/9.1.0..HEAD,结果通过。
  2. 本次为 cherry-pick 回合,原 master PR 测试结论为 PASS。

核对清单

其他信息

回合提交:

  • a14200af0a533eced6368ff435ce23831f534238
  • 44eab8af33d91753e8af650776eaabf7799591c2
likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 zhangjie 的贡献)
zhangjiezhangjie成员
7月13日 创建了 pull request,commit 43c7ae32
zhangjiezhangjie成员
7月13日 关联了issue:[Bug-Report|缺陷反馈]: 接口文档acllogVaList无调用示例,需要补充,[Bug-Report|缺陷反馈]: acllogRecord/acllogVaList接口中的moduleId范围是在0到65535,其他值为非法值
atomgit-bot
atomgit-bot
7月13日 评论:

变更摘要

此 PR 将 master 分支的 #715 和 #718 两个修复回合到 9.1.0 分支,主要解决 acllogRecord/acllogVaList 接口中 moduleId 非法范围校验缺失的问题:新增对负数和超过 65535 的 moduleId 值的拦截,防止非法值被 MODULE_ID_MASK 截断后意外产生日志,同时补充了相应的单元测试。

主要改动

  • acllogVaList 增加 moduleId 范围前置校验:在 src/dfx/log/liblog/slog/slog_api.cpp 中,于函数入口处新增对 moduleId 的合法性检查,拒绝 moduleId < 0moduleId > ACLLOG_USER_MODULE_ID_MAX(65535)的调用,记录系统日志警告后直接返回,并将原有的 moduleId < 0 检查从后续 if 条件中移除,避免重复判断。

  • 新增 4 个单元测试用例覆盖边界场景:在 tests/ut/slog/ut/ep/alog_host/testcase/alog_host_func_utest.cc 中增加 AcllogInvalidModuleId_NegativeOne(负数 -1)、AcllogInvalidModuleId_Overflow65536(超上限 65536)、AcllogValidModuleId_Baseline(合法值 0xff00 正常路径)和 AcllogInvalidModuleId(混合非法与合法 moduleId 综合场景),验证非法入参被拒绝后不产生主机日志,合法入参仍正常记录。

  • 补充 acllogVaList 接口调用文档示例:根据 PR 描述,回合了 master 分支的文档更新,补充了 acllogVaList 接口的调用示例(文档文件不在嵌入的 patch 中,但属本次变更范围)。

likedislike
atomgit-bot
atomgit-bot
7月13日 评论:

代码审查

我已经完成了对所有三个变更文件的全面审查。以下是我的分析结论。


审查结论

经过对三个变更文件的逐行审查,我对每个文件的评估如下:

1. docs/03_api_ref/23_日志接口.md

  • 变更内容:为 acllogVaList 接口新增了调用示例代码段。
  • 审查结果:示例代码正确展示了如何通过 va_list 包装调用 acllogVaListva_start/va_end 配对正确,参数类型和用法均符合接口规范。示例中不包含任何不安全的命令、密钥泄露、危险配置或诱导用户执行不安全操作的指令。无问题

2. src/dfx/log/liblog/slog/slog_api.cpp

  • 变更内容
    1. acllogVaList 函数入口处新增 moduleId 范围校验(< 0> 65535),拒绝非法值并通过 SELF_LOG_WARN 记录系统日志。
    2. 将原有的 (moduleId < 0) || (fmt == nullptr) 检查简化为仅 (fmt == nullptr),因为 moduleId < 0 已被前移的新检查覆盖。
  • 审查结果
    • 校验逻辑正确:ACLLOG_USER_MODULE_ID_MAX = 0xffffU = 65535,边界值处理准确(0 通过,65535 通过,65536 拒绝,负数拒绝)。
    • 新检查位于 g_slogFuncInfo handle 调用之前,确保两条代码路径(handle 路径和本地回退路径)均受到保护。
    • SELF_LOG_WARN 格式化字符串中,moduleIdint32_t)使用 %dACLLOG_USER_MODULE_ID_MAXuint32_t)使用 %u,格式匹配正确。
    • acllogRecord 委托调用 acllogVaList,因此两个公开接口均被覆盖。
    • 原有 fmt == nullptr 检查在 handle 路径上仍未校验(与变更前行为一致),属已有行为,非本次引入。无问题

3. tests/ut/slog/ut/ep/alog_host/testcase/alog_host_func_utest.cc

  • 变更内容:新增 4 个测试用例,覆盖 moduleId 非法值的各种场景:
    • AcllogInvalidModuleId_NegativeOne:测试 -1
    • AcllogInvalidModuleId_Overflow65536:测试 65536(超出上限)
    • AcllogValidModuleId_Baseline:测试合法值 0xff00,验证正常路径未受影响
    • AcllogInvalidModuleId:混合测试多个非法值与合法值
  • 审查结果:测试用例设计合理,分别覆盖了负数边界、上限溢出边界、合法基线回归、以及混合场景下的正确性。测试期望值(EXPECT_EQ(0, ...) 对非法输入,EXPECT_EQ(1, ...) 对合法输入)与代码行为一致。测试前通过 setenv/DlogConstructor 进行环境初始化,测试后通过 DlogDestructor/unsetenv 进行清理,符合 RAII 模式的测试规范。无问题

总结

优先级 问题数量
P0 0
P1 0
P2 0
P3 0

整体风险评估:此变更为低风险的 bug 修复回合。代码变更仅在一个函数入口添加了输入校验并补充了文档示例和单元测试,逻辑清晰、边界处理正确,不存在正确性、安全性或可靠性方面的回归风险。

类型 数量
🔴 阻塞 0
🟡 建议 1

💬 仅评论

likedislike
CANN-robotCANN-robot成员
7月13日 添加了label:stat/needs-squash
此处折叠了43条消息 查看更多
CANN-robotCANN-robot成员
7月13日 添加了label:approved
wangtao成员
7月13日 评论:

/lgtm

likedislike
CANN-robotCANN-robot成员
7月13日 添加了label:lgtm
CANN-robotCANN-robot成员
7月13日 解决了最后一个问题
CANN-robotCANN-robot成员
7月13日 合入了pull request