已关闭
【缺陷报告】内存分配大小错误 - 文件diag_flat_tiling.cpp - 函数TilingDiagFlat - 行号108 #2779
zhangjunkai9创建于 8月20日关闭于 9月4日
陈思
8月21日 评论:
8月21日 评论:
根因确认
已核对当前 master。该文件目前位于 conversion/diag_flat/op_host/arch22/diag_flat_tiling.cpp,不是 Issue 中的 arch32 路径。TilingDiagFlat 使用 sizeof(dataType) 计算辅助矩阵和输出数据大小,而 dataType 是 ge::DataType 枚举;得到的是枚举对象大小,不是枚举所代表元素类型的字节数。告警成立。
修复时应与同文件其他路径一致使用 ge::GetSizeByDataType(dataType),并覆盖 2/4/8 字节数据类型的 tiling 容量计算。后续由责任人安排修复和验证。


9月3日 将 sunchun 设为负责人
9月3日 关联了pull request:fix:issue 2779
9月4日 关闭了 issue
9月4日 添加了label:resolved
缺陷信息
缺陷描述
在TilingDiagFlat函数中,第108-109行使用sizeof(dataType)计算auxMatrix和outputDataSize,其中dataType是ge::DataType枚举类型,sizeof(dataType)返回枚举类型自身大小(通常4字节),而非该枚举值所代表的数据类型大小(如float16为2字节、float64为8字节)。正确方式应使用ge::GetSizeByDataType(dataType),同文件第43行和第64行即采用了该正确方式。对于8字节数据类型,auxMatrix和outputDataSize被低估为实际值的1/2,导致inputDataSize=ubSize-auxMatrix-outputDataSize被高估,内核可能认为UB可容纳更多输入数据而导致UB缓冲区溢出。
事实核查
数据流证据
传播路径:
调用链
可达调用链1 起点:
(entry functions)→ 终点:optiling::TilingDiagFlat深度:2修复建议
auto auxMatrix = SCALAR_THRESHOLD_NUM * SCALAR_THRESHOLD_NUM * ge::GetSizeByDataType(dataType); auto outputDataSize = SCALAR_THRESHOLD_NUM * SCALAR_THRESHOLD_NUM * ge::GetSizeByDataType(dataType);