已关闭
【缺陷报告】内存分配大小错误 - 文件stft_tiling_base.cpp - 函数GetPlatformInfo - 行号62 #2778
zhangjunkai9创建于  17 天前关闭于  11 天前
zhangjunkai9
17 天前 创建

缺陷信息

缺陷类型incorrectMemoryAllocationSize (内存分配大小错误)
函数GetPlatformInfo
文件math/stft/op_host/stft_tiling_base.cpp
行号62
置信度90%

缺陷描述

第62/66/70行获取L0_A/L0_B/L0_C内存大小时均使用了CoreMemType::UB而非正确的L0_A/L0_B/L0_C枚举值,是复制粘贴错误。导致l0ASize/l0BSize/l0CSize实际存储的均为UB大小,若下游使用这些值进行缓冲区分配计算将导致内存分配与实际L0缓存大小不匹配

事实核查

经复核确认:第62/66/70行分别查询 l0ASizePlatform/l0BSizePlatform/l0CSizePlatform 时均使用 CoreMemType::UB 枚举,应为 CoreMemType::L0_A/L0_B/L0_C,属复制粘贴错误。

对比 stft_tiling.cpp 第53-55行的正确写法(使用 L0_A/L0_B/L0_C 枚举),证实此处确实为错误。

该函数通过 GetPlatformInfo 被 tiling 流程调用,且当 platformPtr 非空时走入此分支,可达路径存在。

l0ASize/l0BSize/l0CSize 实际存储的均为 UB 大小,若下游基于这些值做 L0 缓存分配计算将导致内存分配与实际 L0 大小不匹配,缺陷真实存在。

数据流证据

Source(问题源头)

math/stft/op_host/stft_tiling_base.cpp:62 行 ascendcPlatform.GetCoreMemSize(platform_ascendc::CoreMemType::UB, l0ASizePlatform) 错误地使用UB枚举值查询L0_A大小

Sink(问题爆发点)

math/stft/op_host/stft_tiling_base.cpp:63 行 l0ASize = static_cast<int64_t>(l0ASizePlatform) 将UB大小错误地赋值给l0ASize,后续若用于缓冲区计算将分配大小不匹配

传播路径:

# 文件 行号 说明
1 math/stft/op_host/stft_tiling_base.cpp 62 GetCoreMemSize(CoreMemType::UB, l0ASizePlatform) 查询UB大小而非L0_A大小(source,复制粘贴错误)
2 math/stft/op_host/stft_tiling_base.cpp 63 l0ASize = static_cast<int64_t>(l0ASizePlatform) 将UB大小存入l0ASize(sink)
3 math/stft/op_host/stft_tiling_base.cpp 66 GetCoreMemSize(CoreMemType::UB, l0BSizePlatform) 同样错误使用UB查询L0_B
4 math/stft/op_host/stft_tiling_base.cpp 67 l0BSize = static_cast<int64_t>(l0BSizePlatform) 将UB大小存入l0BSize(sink)
5 math/stft/op_host/stft_tiling_base.cpp 70 GetCoreMemSize(CoreMemType::UB, l0CSizePlatform) 同样错误使用UB查询L0_C
6 math/stft/op_host/stft_tiling_base.cpp 71 l0CSize = static_cast<int64_t>(l0CSizePlatform) 将UB大小存入l0CSize(sink)

修复建议

ascendcPlatform.GetCoreMemSize(platform_ascendc::CoreMemType::L0_A, l0ASizePlatform);
l0ASize = static_cast<int64_t>(l0ASizePlatform);

uint64_t l0BSizePlatform;
ascendcPlatform.GetCoreMemSize(platform_ascendc::CoreMemType::L0_B, l0BSizePlatform);
l0BSize = static_cast<int64_t>(l0BSizePlatform);

uint64_t l0CSizePlatform;
ascendcPlatform.GetCoreMemSize(platform_ascendc::CoreMemType::L0_C, l0CSizePlatform);
l0CSize = static_cast<int64_t>(l0CSizePlatform);
likedislike
陈思
陈思成员
16 天前 评论:

分析结论

已核对当前 master。fallback GetPlatformInfo 获取 L0A/L0B/L0C 容量时三次都传入了 CoreMemType::UB,与变量语义和另一实现不一致,复制粘贴错误成立。

但在当前 STFT 目录内继续追踪后,没有找到这些 fallback 字段参与后续 tiling 计算的读取点,因此现阶段只能确认“平台信息记录错误”的潜在缺陷,Issue 所述内存分配错误影响尚未形成完整可达链路。

建议改用对应的 L0_A/L0_B/L0_C 类型,并为 fallback 平台信息增加字段值测试;如认为已有业务影响,请补充实际消费点或复现。后续由责任人安排修复和验证。

likedislike
east_yang成员
12 天前 评论:

对应环境变量l0ASizePlatform、l0BSizePlatform、l0CSizePlatform复检后不涉及真实引用消费,不涉及内存错误使用的业务风险,属于命名不规范和冗余代码问题,可以对代码进行优化修改。

likedislike
CANN-robotCANN-robot成员
11 天前 关闭了 issue
CANN-robotCANN-robot成员
11 天前 添加了label:resolved