已关闭
【缺陷报告】除零错误 - 文件init_global_memory_v220_impl.h - 函数InitGlobalMemoryImpl - 行号47 #1548
zhangjunkai9创建于  8月19日关闭于  8月28日
zhangjunkai9
8月19日 创建

缺陷信息

缺陷类型divideByZero (除零错误)
函数InitGlobalMemoryImpl
文件impl/adv_api/detail/utils/init_global_memory/init_global_memory_v220_impl.h
行号47

缺陷描述

InitGlobalMemoryImpl(v220) 第47行 size / popSize 未检查 popSize 是否为0,与 v200 版本完全相同的缺陷模式。popSize 由 popBuffer.GetSize() 计算得出,无非零保证。对比 v310 版本有 ASCENDC_ASSERT(popSize > 0) 保护,v220 版本缺少此检查。该函数通过 InitGlobalMemory 调用链可达。

数据流证据

Source(问题源头)

impl/adv_api/detail/utils/init_global_memory/init_global_memory_v220_impl.h:43 行 PopStackBuffer<T, TPosition::LCM>(popBuffer) 分配缓冲区

Sink(问题爆发点)

impl/adv_api/detail/utils/init_global_memory/init_global_memory_v220_impl.h:47 行 size / popSize 整数除法(popSize 可能为0)

传播路径:

# 文件 行号 说明
1 impl/adv_api/detail/utils/init_global_memory/init_global_memory_v220_impl.h 41 LocalTensor popBuffer 声明
2 impl/adv_api/detail/utils/init_global_memory/init_global_memory_v220_impl.h 43 PopStackBuffer 返回值 ret 已检查,但仅验证分配是否成功
3 impl/adv_api/detail/utils/init_global_memory/init_global_memory_v220_impl.h 46 const uint32_t popSize = popBuffer.GetSize() >= maxBurstSize ? maxBurstSize : popBuffer.GetSize() 获取缓冲区大小,无 popSize>0 校验
4 impl/adv_api/detail/utils/init_global_memory/init_global_memory_v220_impl.h 47 size / popSize 除法操作(sink)
5 impl/adv_api/detail/utils/init_global_memory/init_global_memory_v310_impl.h 42 v310 版本有 ASCENDC_ASSERT(popSize > 0) 保护,v220 缺少此保护

调用链

可达调用链1 起点:(entry functions) → 终点:AscendC::InitGlobalMemoryImpl 深度:1

# 文件 函数 函数起始行 调用点行
1 impl/adv_api/detail/utils/init_global_memory/init_global_memory_v220_impl.h:AscendC: InitGlobalMemory 74 76
2 impl/adv_api/detail/utils/init_global_memory/init_global_memory_v220_impl.h:AscendC: InitGlobalMemoryImpl 35 —

修复建议

const uint32_t popSize = popBuffer.GetSize() >= maxBurstSize ? maxBurstSize : popBuffer.GetSize();
ASCENDC_ASSERT((popSize > 0), { KERNEL_LOG(KERNEL_ERROR, "popSize must be larger than 0"); });
likedislike
shaonaiteshaonaite成员
8月19日 将 chenyiyuan 设为负责人
Cchenyiyuan成员
8月19日 将 jcmrn0930 设为负责人
chenyiyuan成员
8月19日 评论:

你好,该问题已确认,将增加此处校验,会尽快修复。

likedislike
Jjcmrn0930成员
8月19日 关联了pull request:issue
Jjcmrn0930成员
8月19日 删除了关联的pull request:issue
Jjcmrn0930成员
8月19日 关联了pull request:issue
Jjcmrn0930成员
8月19日 删除了关联的pull request:issue
Jjcmrn0930成员
8月19日 关联了pull request:issue
Jjcmrn0930成员
8月19日 删除了关联的pull request:issue
Jjcmrn0930成员
8月19日 关联了pull request:issue
Jjcmrn0930成员
8月21日 关联了pull request:fix: assert init global memory pop size
Jjcmrn0930成员
8月24日 关联了pull request:解决issue1547/1548
Cchenyiyuan成员
8月28日 删除了关联的pull request:issue
Cchenyiyuan成员
8月28日 删除了关联的pull request:fix: assert init global memory pop size
chenyiyuan成员
8月28日 评论:

你好,该问题以增加校验,若无问题,将关闭该issue。

likedislike
Cchenyiyuan成员
8月28日 issue状态由 进行中 改变为 已完成
Cchenyiyuan成员
8月28日 关闭了 issue
CANN-robotCANN-robot成员
8月28日 添加了label:resolved