已关闭
[Bug-Report|缺陷反馈]: matchC2C_ / matchC2R_ 缺少维度数保护,输入维度数小于 plan 时数组负索引越界读 #102
syy_3597创建于  13 天前关闭于  13 天前
syy_3597
13 天前 创建

Describe the current behavior / 问题描述

core/fft/fft_api.cpp 中 matchC2C_(:1167)与 matchC2R_(:1203)的循环:

    int64_t lastDim = static_cast<int64_t>(tensorDimSize) - 1;
    int64_t i = lastDim;
    for (auto iterPtr = plan.fftSizes.rbegin(); iterPtr != plan.fftSizes.rend(); iterPtr++, i--) {
        int64_t dim = dims[i];      // <- 当 plan.fftSizes 维度数 > 输入张量维度数时, i 变为负
        ...

当输入张量维度数小于 plan 的 fftSizes 维度数(例如 2D plan 传入 1 维张量)时,i 会递减为负,dims[i] 造成数组越界读——读到栈上随机数据,可能误判通过(越界值恰好相等)进而以错误 shape 进入计算,或直接崩溃。

对比:同文件 commonMatchFunc()(:544)已有正确防护:

    if (static_cast<int64_t>(plan.fftSizes.size()) > last + 1) {
        return false;
    }

这两个函数缺失同样的保护。matchC2C_/matchC2R_asdFftExecC2C/asdFftExecC2R/asdFftExecR2C 全部执行入口调用。

Impact / 影响

仅维度不匹配的异常输入触发;触发即越界读。照抄同文件已验证的防护逻辑,正常输入路径零改动,无回归风险。

Suggested fix / 修复建议

在两函数循环前补充与 commonMatchFunc() 相同的维度数前置校验。建议补 1 条低维输入负向 UT。

Environment / 环境信息

  • 位置: core/fft/fft_api.cpp:1167(matchC2C_)、:1203(matchC2R_)
  • 参照实现: core/fft/fft_api.cpp:544(commonMatchFunc)
likedislike
east_yang成员
13 天前 评论:

感谢您的反馈,当前@east_yang跟踪处理中。

likedislike
Ssyy_3597
13 天前 关联了pull request:fix: 修复代码审查发现的健壮性与文档问题(#96-#105)
CANN-robotCANN-robot成员
13 天前 关闭了 issue
CANN-robotCANN-robot成员
13 天前 添加了label:resolved