已关闭
【缺陷报告】空指针解引用 - 文件stateless_random_uniform_v2_tiling_arch35.cpp - 函数TilingPrepare4StatelessRandomUniformV2 - 行号223 #2763
zhangjunkai9创建于  24 天前关闭于  20 天前
zhangjunkai9
24 天前 创建

缺陷信息

缺陷类型nullptrDeref (空指针解引用)
函数TilingPrepare4StatelessRandomUniformV2
文件random/stateless_random_uniform_v2/op_host/arch35/stateless_random_uniform_v2_tiling_arch35.cpp
行号223
置信度95%

缺陷描述

第223行对 platformInfoPtr 做了重复的空指针校验(第220行已校验),而应校验 compileInfoPtr。compileInfoPtr 由 context->GetCompiledInfo() 获取(第222行),在第226-227行被解引用访问 aivNum 和 ubSize 字段,但从未做空指针校验。与 stateless_random_normal_v2 同属复制粘贴错误

事实核查

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

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

此缺陷与 stateless_random_normal_v2_tiling_arch35.cpp 中的同模式缺陷完全一致,均为复制粘贴错误,缺陷属实

数据流证据

Source(问题源头)

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

Sink(问题爆发点)

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

传播路径:

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

调用链

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

# 文件 函数 函数起始行 调用点行
1 random/stateless_random_uniform_v2/op_host/arch35/stateless_random_uniform_v2_tiling_arch35.cpp:optiling: TilingPrepare4StatelessRandomUniformV2 216

修复建议

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

auto compileInfoPtr = context->GetCompiledInfo<StatelessRandomUniformV2CompileInfo>();
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
陈思
陈思成员
23 天前 评论:

根因确认

已核对当前 masterTilingPrepare4StatelessRandomUniformV2 与 #2762 是同类问题:获取 compileInfoPtr 后重复检查 platformInfoPtr,随后未经检查便解引用 compileInfoPtr。这是复制粘贴导致的检查对象错误,告警成立。

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

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