第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
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)
Sink(问题爆发点)
random/stateless_random_normal_v2/op_host/arch35/stateless_random_normal_v2_tiling_arch35.cpp:230 行 compileInfoPtr->aivNum 解引用未经空检查的 compileInfoPtr(空指针解引用 sink)
传播路径:
可达调用链1 起点:(entry functions) → 终点:optiling::TilingPrepare4StatelessRandomNormalV2 深度:0
(entry functions)
optiling::TilingPrepare4StatelessRandomNormalV2
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);
已核对当前 master。TilingPrepare4StatelessRandomNormalV2 获取 compileInfoPtr 后,第二次空指针检查仍检查了已经检查过的 platformInfoPtr,随后直接访问 compileInfoPtr->aivNum 和 compileInfoPtr->ubSize。这是复制粘贴导致的检查对象错误,告警成立。
master
TilingPrepare4StatelessRandomNormalV2
compileInfoPtr
platformInfoPtr
compileInfoPtr->aivNum
compileInfoPtr->ubSize
修复时应将第二处检查对象改为 compileInfoPtr,并补充 compiled info 为空的失败路径回归。后续由责任人安排修复和验证。
缺陷信息
缺陷描述
第227行对 platformInfoPtr 做了重复的空指针校验(第224行已校验),而应校验 compileInfoPtr。compileInfoPtr 由 context->GetCompiledInfo() 获取(第226行),在第230-231行被解引用访问 aivNum 和 ubSize 字段,但从未做空指针校验。这是典型的复制粘贴错误:第二处空检查应检查 compileInfoPtr 而非重复检查 platformInfoPtr
事实核查
数据流证据
传播路径:
调用链
可达调用链1 起点:
(entry functions)→ 终点:optiling::TilingPrepare4StatelessRandomNormalV2深度:0修复建议
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);