已关闭
【缺陷报告】空指针解引用 - 文件acosh.cpp - 函数l0op::Acos - 行号60 #2766
zhangjunkai9创建于  17 天前关闭于  13 天前
zhangjunkai9
17 天前 创建

缺陷信息

缺陷类型nullptrDeref (空指针解引用)
函数l0op::Acos
文件math/acos/op_api/acosh.cpp
行号60
置信度90%

缺陷描述

executor->AllocTensor()返回值output未做空指针校验即在第62-66行被使用(AcosAiCore/AcosAiCpu均解引用output)。同模块acosh.cpp:63-64对同样场景有CHECK_RET(output != nullptr, nullptr)校验,此处缺少该保护,若AllocTensor内存不足返回nullptr则AcosAiCore/AcosAiCpu中解引用output将崩溃。

事实核查

经复核源码确认:(1) acos.cpp:60行调用AllocTensor获取output,未做nullptr校验即在第63/65行传入AcosAiCore/AcosAiCpu,内部宏OP_OUTPUT会解引用output;

(2) 同模块acosh.cpp:63-64行对同样AllocTensor调用有CHECK_RET(output != nullptr, nullptr)保护,acos.cpp确实缺少该保护;

(3) 调用链可达:aclnn_acos.cpp:131行ExecAcosGetWorkspaceSize中调用l0op::Acos,为生产路径。

缺陷真实存在。

数据流证据

Source(问题源头)

math/acos/op_api/acos.cpp:60 行 auto output = executor->AllocTensor(input->GetViewShape(), input->GetDataType()) AllocTensor在内存不足时可返回nullptr

Sink(问题爆发点)

math/acos/op_api/acos.cpp:63 行 return AcosAiCore(input, output, executor) / 第65行 return AcosAiCpu(input, output, executor) output作为参数传入后被解引用使用

传播路径:

# 文件 行号 说明
1 math/acos/op_api/acos.cpp 60 auto output = executor->AllocTensor(...) AllocTensor返回值可能为nullptr(source)
2 math/acos/op_api/acos.cpp 62 if (IsAiCoreSupport(input->GetDataType())) 分支判断但未检查output是否为nullptr
3 math/acos/op_api/acos.cpp 41 AcosAiCore函数内第44行ADD_TO_LAUNCHER_LIST_AICORE(Acos, OP_INPUT(input), OP_OUTPUT(output)) 解引用output(sink)
4 math/acos/op_api/acos.cpp 50 AcosAiCpu函数内第54行ADD_TO_LAUNCHER_LIST_AICPU(Acos, OP_ATTR_NAMES(), OP_INPUT(input), OP_OUTPUT(output)) 解引用output(sink)
5 math/acosh/op_api/acosh.cpp 63-64 同模式代码有CHECK_RET(output != nullptr, nullptr)保护(对比证据:acos.cpp缺少该保护)

修复建议

auto output = executor->AllocTensor(input->GetViewShape(), input->GetDataType());
CHECK_RET(output != nullptr, nullptr);
likedislike
陈思
陈思成员
17 天前 评论:

根因确认

已核对当前 master。Issue 中的文件名应为 math/acos/op_api/acos.cpp,不是 acosh.cppl0op::Acos 调用 executor->AllocTensor(...) 后未检查返回值,就把 output 传给 AiCore/AiCpu launcher;同类实现已有 CHECK_RET(output != nullptr, nullptr) 防护,告警成立。

修复时应在分支选择前校验分配结果,并补充分配失败路径测试。后续由责任人安排修复和验证。

likedislike
zhangqijia1成员
17 天前 评论:

/assign

likedislike
CANN-robotCANN-robot成员
17 天前 将 gcw_SUaZx3UQ 设为负责人
zhangjunkai9
16 天前 评论:

根因确认

已核对当前 master。Issue 中的文件名应为 math/acos/op_api/acos.cpp,不是 acosh.cppl0op::Acos 调用 executor->AllocTensor(...) 后未检查返回值,就把 output 传给 AiCore/AiCpu launcher;同类实现已有 CHECK_RET(output != nullptr, nullptr) 防护,告警成立。

修复时应在分支选择前校验分配结果,并补充分配失败路径测试。后续由责任人安排修复和验证。

@chensi79

你说得对,确实是math/acos/op_api/acos.cpp,而不是acosh.cpp,在此修正

likedislike
Zzhangqijia1成员
14 天前 关联了pull request:fix(acos): 修复 AllocTensor 空指针解引用
CANN-robotCANN-robot成员
13 天前 关闭了 issue
CANN-robotCANN-robot成员
13 天前 添加了label:resolved