已关闭
【缺陷报告】空指针解引用 - 文件stateless_random_normal_v2_tiling_arch35.cpp - 函数TilingPrepare4StatelessRandomNormalV2 - 行号227 #2762
zhangjunkai9创建于  20 天前关闭于  16 天前
zhangjunkai9
20 天前 创建

缺陷信息

缺陷类型nullptrDeref (空指针解引用)
函数TilingPrepare4StatelessRandomNormalV2
文件random/stateless_random_normal_v2/op_host/arch35/stateless_random_normal_v2_tiling_arch35.cpp
行号227
置信度95%

缺陷描述

第227行对 platformInfoPtr 做了重复的空指针校验(第224行已校验),而应校验 compileInfoPtr。compileInfoPtr 由 context->GetCompiledInfo() 获取(第226行),在第230-231行被解引用访问 aivNum 和 ubSize 字段,但从未做空指针校验。这是典型的复制粘贴错误:第二处空检查应检查 compileInfoPtr 而非重复检查 platformInfoPtr

事实核查

经复核源代码确认,第224行已对 platformInfoPtr 做了 OP_CHECK_NULL_WITH_CONTEXT 校验,但第227行再次对 platformInfoPtr 做同样的校验(重复检查),而第226行获取的 compileInfoPtr 从未校验。

第230-231行直接解引用 compileInfoPtr 访问 aivNum 和 ubSize,若 GetCompiledInfo 返回 nullptr 将导致空指针解引用。

对比同模块 stateless_random_choice_with_mask_simt_tiling.cpp:216-220 的正确写法(先检查 compileInfoPtr 再检查 platformInfoPtr),确认第227行为复制粘贴错误,缺陷属实

数据流证据

Source(问题源头)

random/stateless_random_normal_v2/op_host/arch35/stateless_random_normal_v2_tiling_arch35.cpp:226 行 auto compileInfoPtr = context->GetCompiledInfo() 获取编译信息指针,可能返回 nullptr

Sink(问题爆发点)

random/stateless_random_normal_v2/op_host/arch35/stateless_random_normal_v2_tiling_arch35.cpp:230 行 compileInfoPtr->aivNum 解引用未经空检查的 compileInfoPtr(空指针解引用 sink)

传播路径:

# 文件 行号 说明
1 random/stateless_random_normal_v2/op_host/arch35/stateless_random_normal_v2_tiling_arch35.cpp 223 fe::PlatFormInfos* platformInfoPtr = context->GetPlatformInfo() 获取 platformInfoPtr
2 random/stateless_random_normal_v2_tiling_arch35/stateless_random_normal_v2_tiling_arch35.cpp 224 OP_CHECK_NULL_WITH_CONTEXT(context, platformInfoPtr) 首次校验 platformInfoPtr(正确)
3 random/stateless_random_normal_v2/op_host/arch35/stateless_random_normal_v2_tiling_arch35.cpp 226 auto compileInfoPtr = context->GetCompiledInfo() 获取 compileInfoPtr,未校验
4 random/stateless_random_normal_v2/op_host/arch35/stateless_random_normal_v2_tiling_arch35.cpp 227 OP_CHECK_NULL_WITH_CONTEXT(context, platformInfoPtr) 重复校验 platformInfoPtr(应为 compileInfoPtr,复制粘贴错误)
5 random/stateless_random_normal_v2/op_host/arch35/stateless_random_normal_v2_tiling_arch35.cpp 230 compileInfoPtr->aivNum 解引用未经空检查的 compileInfoPtr(sink)
6 random/stateless_random_normal_v2/op_host/arch35/stateless_random_normal_v2_tiling_arch35.cpp 231 compileInfoPtr->ubSize 解引用未经空检查的 compileInfoPtr(sink)

调用链

可达调用链1 起点:(entry functions) → 终点:optiling::TilingPrepare4StatelessRandomNormalV2 深度:0

# 文件 函数 函数起始行 调用点行
1 random/stateless_random_normal_v2/op_host/arch35/stateless_random_normal_v2_tiling_arch35.cpp:optiling: TilingPrepare4StatelessRandomNormalV2 221

修复建议

fe::PlatFormInfos* platformInfoPtr = context->GetPlatformInfo();
OP_CHECK_NULL_WITH_CONTEXT(context, platformInfoPtr);

auto compileInfoPtr = context->GetCompiledInfo<StatelessRandomNormalV2CompileInfo>();
OP_CHECK_NULL_WITH_CONTEXT(context, compileInfoPtr);

auto ascendcPlatform = platform_ascendc::PlatformAscendC(platformInfoPtr);
compileInfoPtr->aivNum = ascendcPlatform.GetCoreNumAiv();
ascendcPlatform.GetCoreMemSize(platform_ascendc::CoreMemType::UB, compileInfoPtr->ubSize);
likedislike
陈思
陈思成员
19 天前 评论:

根因确认

已核对当前 masterTilingPrepare4StatelessRandomNormalV2 获取 compileInfoPtr 后,第二次空指针检查仍检查了已经检查过的 platformInfoPtr,随后直接访问 compileInfoPtr->aivNumcompileInfoPtr->ubSize。这是复制粘贴导致的检查对象错误,告警成立。

修复时应将第二处检查对象改为 compileInfoPtr,并补充 compiled info 为空的失败路径回归。后续由责任人安排修复和验证。

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