已关闭
【缺陷报告】空指针解引用 - 文件aclnn_remainder.cpp - 函数BroadcastTensor - 行号386 #2774
zhangjunkai9创建于  27 天前关闭于  24 天前
zhangjunkai9
27 天前 创建

缺陷信息

缺陷类型nullptrDeref (空指针解引用)
函数BroadcastTensor
文件math/floor_mod/op_api/aclnn_remainder.cpp
行号386
置信度95%

缺陷描述

第379行l0op::BroadcastTo返回nullptr时(第380-382行仅日志未return),或第386行l0op::ReFormat返回nullptr时(第387-389行仅日志未return),x均为nullptr但仍被后续使用。函数第391行return x返回nullptr给调用方,调用方虽做了CHECK_RET但BroadcastTensor内部在第378行x->GetViewShape()和第386行ReFormat传入null x时已触发空指针解引用。第二个null-check缺return与第一个同源。

事实核查

经复核aclnn_remainder.cpp第370-392行源码确认,BroadcastTensor函数存在两处null-check缺return缺陷:(1)第379行l0op::BroadcastTo返回nullptr时,第380-382行仅日志未return,导致第386行l0op::ReFormat(x,...)接收到nullptr入参,ReFormat内部可能解引用空指针;

(2)第386行ReFormat返回nullptr时,第387-389行同样仅日志未return。

两处缺陷与缺陷2同源,均为null-check后缺return模式。

缺陷真实存在,且与缺陷2是同一函数中不同位置的独立缺陷。

数据流证据

Source(问题源头)

math/floor_mod/op_api/aclnn_remainder.cpp:386 行 x = l0op::ReFormat(x, op::Format::FORMAT_ND) ReFormat返回nullptr表示格式转换失败

Sink(问题爆发点)

math/floor_mod/op_api/aclnn_remainder.cpp:391 行 return x 返回nullptr给调用方,且ReFormat内部可能解引用null入参x(来自第379行BroadcastTo返回null)

传播路径:

# 文件 行号 说明
1 math/floor_mod/op_api/aclnn_remainder.cpp 379 x = l0op::BroadcastTo(x, broadcastShape, executor) BroadcastTo可能返回nullptr
2 math/floor_mod/op_api/aclnn_remainder.cpp 380-382 if (x == nullptr) { OP_LOGE(...) } 检测到空指针但仅打印日志,缺少return
3 math/floor_mod/op_api/aclnn_remainder.cpp 386 x = l0op::ReFormat(x, op::Format::FORMAT_ND) 传入可能为nullptr的x,ReFormat内部可能解引用
4 math/floor_mod/op_api/aclnn_remainder.cpp 387-389 if (x == nullptr) { OP_LOGE(...) } 检测到空指针但仅打印日志,缺少return
5 math/floor_mod/op_api/aclnn_remainder.cpp 391 return x 返回nullptr(sink传导点)

修复建议

x = l0op::BroadcastTo(x, broadcastShape, executor);
if (x == nullptr) {
    OP_LOGE(ACLNN_ERR_PARAM_INVALID, "Broadcast result is nullptr.");
    return nullptr;
}

x = l0op::ReFormat(x, op::Format::FORMAT_ND);
if (x == nullptr) {
    OP_LOGE(ACLNN_ERR_PARAM_INVALID, "Reformat result is nullptr.");
    return nullptr;
}

return x;
likedislike
陈思
陈思成员
27 天前 评论:

根因确认

已核对当前 master。Remainder 的 BroadcastTo/ReFormat 链路中,格式转换失败后只记录错误但继续执行,后续仍会使用空返回值。根因是错误没有向上传播,而不是单一解引用点,告警成立。

修复时应让转换失败立即返回,并保证上层不再构造/下发后续节点,补充 BroadcastTo 或 ReFormat 失败路径回归。后续由责任人安排修复和验证。

likedislike
Nice tryNice try成员
26 天前 将 Nice_try 设为负责人
Nice tryNice try成员
26 天前 关联了pull request:fix nullptrDeref of aclnn_remainder
CANN-robotCANN-robot成员
24 天前 关闭了 issue
CANN-robotCANN-robot成员
24 天前 添加了label:resolved