Closed
[Bug-Report|缺陷反馈]: aclnnSumV2 对空 Tensor 列表无条件解引用导致 Host 崩溃 #2813
KaranocaVeAdd on Aug 24Closed at Sep 25
Aug 24 Added label: bug-report
Aug 24 Associated pull request
陈思
Aug 24 Comments:
Aug 24 Comments:
/assign @KaranocaVe


Aug 24 Assign KaranocaVe as responsible person
Sep 21 Modify description of issue
Sep 25 Close issue
Sep 25 Added label: resolved
liuchenghao
Oct 6 Comments:
Oct 6 Comments:
【Multica 同步】状态:done;说明:社区侧已由 PR !4986(KaranocaVe:「[Fix] 拒绝 aclnnSumV2 的空 Tensor 列表」,2026-09-25 合入)解决本需求,Multica 跟踪单同步关闭,感谢社区贡献者 KaranocaVe;详情:Multica issue AI4ME-105


KaranocaVe
16 days ago Comments:
16 days ago Comments:
@yue-ma @pingchuantang 您好,这个 Issue 对应的修复已经合入:https://gitcode.com/cann/ops-math/merge_requests/4986
开发者计划反馈,Issue 需要有 Accepted 标签才能计入积分,仅关闭或标记 resolved 还不够。目前这条 Issue 尚未标记 Accepted,麻烦您结合问题和已合入的修复复核一下;确认符合受理条件后,帮忙补上 Accepted 标签。
感谢您的支持!


问题描述
在
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 采用拒绝还是
安全空结果,都不应解引用不存在的元素。
环境信息
cann/ops-math/0a2ce5b57caec6068d9e5658b740c2d41482aa15重现步骤
aclnn_sum_v2.cpp的 Host 验证程序。aclCreateTensorList(nullptr, 0),创建合法输出 Tensor,调用aclnnSumV2GetWorkspaceSize。empty-list用例。[0]的 Tensor 的列表作为对照。预期结果
接口应在参数检查阶段返回明确的参数错误,或实现文档定义的安全 N=0 语义;在任何
情况下都不能读取空列表的第 0 项或崩溃。
实际结果
普通构建和 UBSan 构建均以退出码
139结束。GDB 显示SIGSEGV,调用栈为aclTensorList::operator[]->GetTensorsBroadcastShape->CheckShape->CheckParams->aclnnSumV2GetWorkspaceSize,源码锚点为aclnn_sum_v2.cpp:68-70。日志/最小复现
关键日志摘要:
影响与规避方式
空列表调用方当前无法通过
aclnnStatus处理失败,可能在图编译/Host 调度阶段直接终止进程。临时规避是确保输入列表至少包含一个 Tensor;实现侧应先定义 N=0 的
参数语义,在
GetTensorsBroadcastShape和后续SplitToSumN路径前统一处理,并增加状态码回归测试。
建议的回归测试
增加
aclCreateTensorList(nullptr, 0)的aclnnSumV2GetWorkspaceSize测试,断言调用不崩溃且返回约定状态;保留单个空 Tensor、单个非空 Tensor、多个可广播 Tensor
和不可广播 Tensor 对照,并在普通、UBSan/ASan Host 构建下运行。
关联 PR