Pull Request已成功合入, 合并人@CANN-robot
(感谢 zhangjie 的贡献)变更摘要
此 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 < 0或moduleId > 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 中,但属本次变更范围)。


代码审查
我已经完成了对所有三个变更文件的全面审查。以下是我的分析结论。
审查结论
经过对三个变更文件的逐行审查,我对每个文件的评估如下:
1. docs/03_api_ref/23_日志接口.md
- 变更内容:为
acllogVaList接口新增了调用示例代码段。 - 审查结果:示例代码正确展示了如何通过
va_list包装调用acllogVaList。va_start/va_end配对正确,参数类型和用法均符合接口规范。示例中不包含任何不安全的命令、密钥泄露、危险配置或诱导用户执行不安全操作的指令。无问题。
2. src/dfx/log/liblog/slog/slog_api.cpp
- 变更内容:
- 在
acllogVaList函数入口处新增moduleId范围校验(< 0或> 65535),拒绝非法值并通过SELF_LOG_WARN记录系统日志。 - 将原有的
(moduleId < 0) || (fmt == nullptr)检查简化为仅(fmt == nullptr),因为moduleId < 0已被前移的新检查覆盖。
- 在
- 审查结果:
- 校验逻辑正确:
ACLLOG_USER_MODULE_ID_MAX = 0xffffU = 65535,边界值处理准确(0 通过,65535 通过,65536 拒绝,负数拒绝)。 - 新检查位于
g_slogFuncInfohandle 调用之前,确保两条代码路径(handle 路径和本地回退路径)均受到保护。 SELF_LOG_WARN格式化字符串中,moduleId(int32_t)使用%d,ACLLOG_USER_MODULE_ID_MAX(uint32_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:测试-1AcllogInvalidModuleId_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 |
💬 仅评论


Pull Request
描述
将 master 已合入的 #715 和 #718 回合到 9.1.0 分支:
变更类型
请选择本次引入的变更类型:
关联的Issue
https://gitcode.com/cann/runtime/issues/715
https://gitcode.com/cann/runtime/issues/718
如何测试
描述测试此变更的步骤和前提条件:
核对清单
其他信息
回合提交: