已关闭
【缺陷报告】除零错误 - 文件init_global_memory_v200_impl.h - 函数InitGlobalMemoryImpl - 行号47 #1547
zhangjunkai9创建于 8月19日关闭于 8月28日
8月19日 将 chenyiyuan 设为负责人
chenyiyuan
8月19日 评论:
8月19日 评论:
你好,该问题已确认,将增加此处校验,会尽快修复。


8月19日 将 jcmrn0930 设为负责人
8月28日 删除了关联的pull request:issue
8月28日 删除了关联的pull request:issue
8月28日 删除了关联的pull request:fix: assert init global memory pop size
chenyiyuan
8月28日 评论:
8月28日 评论:
你好,该问题以增加校验,若无问题,将关闭该issue。


8月28日 issue状态由 进行中 改变为 已完成
8月28日 关闭了 issue
8月28日 添加了label:resolved
缺陷信息
缺陷描述
InitGlobalMemoryImpl(v200) 第47行 size / popSize 未检查 popSize 是否为0。popSize 由 popBuffer.GetSize() 计算得出,PopStackBuffer 的返回值 ret 已通过 ASCENDC_ASSERT 检查,但 GetSize() 返回值无任何非零保证。对比 v310 版本(init_global_memory_v310_impl.h:42)有 ASCENDC_ASSERT(popSize > 0) 保护,v200 版本缺少此检查,若 GetSize() 返回0则 popSize 为0导致除零崩溃。该函数通过 InitGlobalMemory 和 Fill 两条调用链可达。
数据流证据
传播路径:
调用链
可达调用链1 起点:
(entry functions)→ 终点:AscendC::InitGlobalMemoryImpl深度:1可达调用链2 起点:
(entry functions)→ 终点:AscendC::InitGlobalMemoryImpl深度:1可达调用链3 起点:
(entry functions)→ 终点:AscendC::InitGlobalMemoryImpl深度:1修复建议
const uint32_t popSize = popBuffer.GetSize() >= maxBurstSize ? maxBurstSize : popBuffer.GetSize(); ASCENDC_ASSERT((popSize > 0), { KERNEL_LOG(KERNEL_ERROR, "popSize must be larger than 0"); });