Closed
[Bug-Report|缺陷反馈]: aclnnSumV2 对空 Tensor 列表无条件解引用导致 Host 崩溃 #2813
KaranocaVeAdd on  Aug 24Closed at  Sep 25
KaranocaVe
KaranocaVe
Aug 24 Create

问题描述

在 cann/ops-math 的 0a2ce5b57caec6068d9e5658b740c2d41482aa15 中,
aclnnSumV2GetWorkspaceSize 对空 aclTensorList 没有返回参数错误,而是在
experimental/math/accumulate_nv2_v2/op_api/aclnn_sum_v2.cpp:70 无条件访问
(*tensors)[0],导致 Host 侧进程收到 SIGSEGV。README 将 tensors 定义为包含
N 个输入 Tensor 的动态列表,并声明支持空 Tensor;无论最终对 N=0 采用拒绝还是
安全空结果,都不应解引用不存在的元素。

环境信息

  • 仓库/commit:cann/ops-math / 0a2ce5b57caec6068d9e5658b740c2d41482aa15
  • OS/架构:Linux 5.10/aarch64
  • Ascend 硬件:Ascend 910B3;本次为 Host OpAPI 验证
  • Driver/Toolkit/OPP:CANN Toolkit/OPP 9.1.0;目标源码为 9.2 开发线
  • 编译器和 Python:G++ 11.4.0、Python 3.12.13、CMake 3.22.1

重现步骤

  1. 使用固定 commit 构建 aclnn_sum_v2.cpp 的 Host 验证程序。
  2. 创建 aclCreateTensorList(nullptr, 0),创建合法输出 Tensor,调用
    aclnnSumV2GetWorkspaceSize。
  3. 在普通构建、UBSan 构建和 GDB 下重复执行 empty-list 用例。
  4. 以含一个 shape 为 [0] 的 Tensor 的列表作为对照。

预期结果

接口应在参数检查阶段返回明确的参数错误,或实现文档定义的安全 N=0 语义;在任何
情况下都不能读取空列表的第 0 项或崩溃。

实际结果

普通构建和 UBSan 构建均以退出码 139 结束。GDB 显示 SIGSEGV,调用栈为
aclTensorList::operator[] -> GetTensorsBroadcastShape -> CheckShape ->
CheckParams -> aclnnSumV2GetWorkspaceSize,源码锚点为
aclnn_sum_v2.cpp:68-70。

日志/最小复现

关键日志摘要:

probe_exit_code=139
Thread ... received signal SIGSEGV, Segmentation fault.
GetTensorsBroadcastShape ... aclnn_sum_v2.cpp:70

影响与规避方式

空列表调用方当前无法通过 aclnnStatus 处理失败,可能在图编译/Host 调度阶段直接
终止进程。临时规避是确保输入列表至少包含一个 Tensor;实现侧应先定义 N=0 的
参数语义,在 GetTensorsBroadcastShape 和后续 SplitToSumN 路径前统一处理,并
增加状态码回归测试。

建议的回归测试

增加 aclCreateTensorList(nullptr, 0) 的 aclnnSumV2GetWorkspaceSize 测试,断言
调用不崩溃且返回约定状态;保留单个空 Tensor、单个非空 Tensor、多个可广播 Tensor
和不可广播 Tensor 对照,并在普通、UBSan/ASan Host 构建下运行。

关联 PR

likedislike
KaranocaVeKaranocaVe
Aug 24 Added label: bug-report
KaranocaVeKaranocaVe
Aug 24 Associated pull request
陈思
陈思Collaborators
Aug 24 Comments:

/assign @KaranocaVe

likedislike
CANN-robotCANN-robotCollaborators
Aug 24 Assign KaranocaVe as responsible person
KaranocaVeKaranocaVe
Sep 21 Modify description of issue
CANN-robotCANN-robotCollaborators
Sep 25 Close issue
CANN-robotCANN-robotCollaborators
Sep 25 Added label: resolved
liuchenghao
liuchenghao
Oct 6 Comments:

【Multica 同步】状态:done;说明:社区侧已由 PR !4986(KaranocaVe:「[Fix] 拒绝 aclnnSumV2 的空 Tensor 列表」,2026-09-25 合入)解决本需求,Multica 跟踪单同步关闭,感谢社区贡献者 KaranocaVe;详情:Multica issue AI4ME-105

likedislike
KaranocaVe
KaranocaVe
16 days ago Comments:

@yue-ma @pingchuantang 您好,这个 Issue 对应的修复已经合入:https://gitcode.com/cann/ops-math/merge_requests/4986

开发者计划反馈,Issue 需要有 Accepted 标签才能计入积分,仅关闭或标记 resolved 还不够。目前这条 Issue 尚未标记 Accepted,麻烦您结合问题和已合入的修复复核一下;确认符合受理条件后,帮忙补上 Accepted 标签。

感谢您的支持!

likedislike