已关闭
【Bug扫描整改】3处真实缺陷已修复(bandwidth_test截断/空指针、mc2_context越界),BUG-029/030核实为误报 #5497
景明创建于  23 天前关闭于  23 天前
景明
景明成员
23 天前 创建

背景

深度代理扫描(A5/DV120,2026-09-14)发现的 host 侧问题。经逐项严格复核(含对扫描器 OP_TILING_CHECK 宏方向误读风险的排查):3 处为真实问题已修复,2 处为扫描误报(不修改代码)。

问题清单与复核结论

Bug ID 严重度 模块 复核结论 定性 处理
BUG-039 High tools/bandwidth_test 真实问题:blockLen 强转 uint16 截断,fp16 下 dataSize=32768 → 65536B → 截断为 0,静默零拷贝;tiling 无 dataSize 上限(窗口总量约束不拦单行);无 UT/example 兜底 可静默触发的实际缺陷 tiling 拦截:单行 32B 对齐字节数 ≤ 65535
BUG-040 Medium tools/bandwidth_test 真实问题:OPTIONAL 属性 aiv_num 解引用未判空;aclnn 路径属性总被设置,图模式未设置时可返回空指针 防御修复(与仓内 OPTIONAL 判空惯例一致:combine_setup commAlg、agmv3 hccl_buffer_size) 判空回退 platformAivNum(与默认值 -1 语义一致)
BUG-016 Low mc2/common/op_api 真实问题:epRankSize_ 无上限校验即循环写定长 1024 的 epHcclBuffer_;姊妹路径 torch_extension comm_context.cpp:494 已有同款 TORCH_CHECK,op_api 独缺 防御修复(姊妹路径对齐;实际可达性受 HCCL 域 rank 上限约束,Low 定级准确) 补充 epRankSize_ <= HCCL_MAX_RANK_SIZE 校验
BUG-029 High moe_distribute_combine_setup(arch35) 误报:除零不可达 扫描器宏方向误读 不修改
BUG-030 High moe_distribute_combine_teardown(arch35) 误报:除零不可达 扫描器宏方向误读 不修改

BUG-029/030 误报依据

扫描器将 OP_TILING_CHECK((*sharedExpertRankNumPtr != 0), ..., "0") 误读为"非零校验"。实际宏语义(op_tiling_util.h 定义)为条件为真即报错,该检查含义是 sharedExpertRankNum 必须为 0(非 0 即拒绝)。证据链:

  1. 宏定义:OP_TILING_CHECK(cond, log, expr) 在 cond 为真时执行报错动作,日志末参为期望值(此处期望 "0");
  2. 算子文档(docs/aclnnMoeDistributeCombineSetup.md,Ascend 950DT 约束小节):"当前不支持共享专家场景……sharedExpertRankNum 仅能传入0"——与代码一致,为有意设计;参数表中 [0, epWorldSize/2] 为通用/目标语义范围(arch22 及家族口径),被 950 约束收窄为 {0},两者不矛盾;
  3. UT 佐证:正常用例全部传 sharedExpertRankNum=0 且期望 GRAPH_SUCCESS(若语义相反正常用例会全挂);传非 0 的用例期望 GRAPH_FAILED;165/165 通过;
  4. 结论:950 上该值被钉死为 0,除数 (epWorldSize - sharedExpertRankNum) 恒为 epWorldSize ∈ {2,4,8},永不为 0。

复核方法论说明

鉴于 BUG-029/030 的误报根因是扫描器误读宏方向,对其余 3 项额外验证了"是否依赖 tiling 宏语义":BUG-039 为 kernel 侧纯 C++ 数值截断、BUG-040 为指针判空、BUG-016 为数组越界,均不涉及宏方向,无同类误读风险;并补充了可达性证据(039:tiling 无上限约束 + 无测试兜底;040:仓内 OPTIONAL 判空惯例;016:姊妹路径同款校验)。

同类问题覆盖面盘点结论

对 (epWorldSize - sharedExpertRankNum) 作除数/取余的全部 17 处产品代码逐一核对:combine v1/v2、dispatch 全系、dispatch_v2、dispatch_setup op_api、torch_extension 均已有等价校验;combine_setup/teardown 的 arch35 路径因值被钉死为 0 而天然安全;examples 2 处为固定合法值。epRankSize 类越界:唯一索引消费点为 GetHcclCommResource 循环,已在数据获取点(CreatMc2Context)拦截。

修复

PR:https://gitcode.com/cann/ops-transformer/merge_requests/12471

likedislike
游震成员
23 天前 评论:

/assign @gitcode_lijd

likedislike
CANN-robotCANN-robot成员
23 天前 将 gitcode_lijd 设为负责人
景明景明成员
23 天前 修改标题为 “【Bug扫描整改】3处host侧校验缺失已修复,BUG-029/030核实为误报”,原标题为“【Bug扫描整改】修复host侧防御性校验缺失5处(除零/数组越界/整数溢出/空指针)”
景明景明成员
23 天前 修改了issue 的描述
景明景明成员
23 天前 修改标题为 “【Bug扫描整改】3处真实缺陷已修复(bandwidth_test截断/空指针、mc2_context越界),BUG-029/030核实为误报”,原标题为“【Bug扫描整改】3处host侧校验缺失已修复,BUG-029/030核实为误报”
景明景明成员
23 天前 修改了issue 的描述
景明景明成员
23 天前 关联了pull request:[Backport-9.2.0] fix(mc2): 修复bandwidth_test拷贝长度截断与可选属性空指针、mc2_context rankSize越界防护
CANN-robotCANN-robot成员
23 天前 关闭了 issue
CANN-robotCANN-robot成员
23 天前 添加了label:resolved