已合并
Fix: 修复8个issue(#41/#42/#50/#52/#53/#56/#59/#60) 构建脚本清理/空指针防护/尺寸截断/UAF #38
Fix: 修复8个issue(#41/#42/#50/#52/#53/#56/#59/#60) 构建脚本清理/空指针防护/尺寸截断/UAF #38
已合并
syy_3597创建于 4 天前
syy_3597
4 天前

修复内容

本 PR 修复 8 个 issue:#41 #42 #50 #52 #53 #56 #59 #60

#41 build.sh 死代码与 sed 错误

删除无任何调用点的 normalize_soc_name() 函数。其 sed 表达式 s/.$/\U&/ 会把末字符转为大写(ascend910Ascend91O),与注释意图不符,且属于死代码,直接清理。

#42 build.sh 帮助文档与实现不一致

头注释与 show_help() 的 Supported SoC models 原声称仅支持 Ascend950/Ascend910B,与 get_soc_version() 实际支持的六种型号矛盾。同步更新为真实列表(Ascend950/910B/910_93/910/310P),并注明 Ascend310B 可识别但当前版本不支持构建。

#50 aclfftExecC2C_1D(arch32) 空指针解引用

入口处未校验即解引用 impl->rank。本函数为 weak 符号可被外部直接调用,plan 为 NULL 时崩溃。补 ACLFFT_CHECK_PARAM(impl != nullptr && idata != nullptr && odata != nullptr) 防御。

#52 aclfftFft1DC2CMix 空指针解引用

输出指针 y 未校验即作为 aclrtMemcpy 目的地址。函数入口补 x/y 判空,返回 ACL_ERROR_INVALID_PARAM

#53 aclfftFft2DDd 空指针解引用

输入指针 x 未校验即作为 aclrtMemcpy 源地址。函数入口补 x/y 判空,返回 ACL_ERROR_INVALID_PARAM

#56 aclfftRfft1DDft 数据类型截断

uint32_t inputSize = batches * fftN * sizeof(float) 以 64 位运算后截断为 uint32_t,batches 无上界校验,超过阈值时高位截断导致 aclrtMalloc 分配不足。inputSize/outputSize 等全部改为 size_t 并对操作数显式提升。

#59 aclfftRfft1D 数据类型截断

((n/2)+1) * COMPLEX_PART * batches * sizeof(float) 中 uint32_t 域中间结果可回绕。改为 size_t 计算,正常范围内结果不变。

#60 aclfftDestroy use-after-free

is_destroyed 防重复销毁检查本身构成 UAF:对象首次调用即被 delete,标志随对象一同释放,第二次调用读取已释放内存来判断标志。移除该无效检查与置位(内部调用方在销毁后均已执行 *plan=nullptr 防重复销毁),NULL 校验后直接 delete。

验证

  • 环境:Atlas 910B3 / CANN 9.1.0
  • bash build.sh --soc=ascend910b 编译通过
  • bash build.sh --soc=ascend910b --run 42/42 测试全部 PASS(覆盖 fft1_d/fft2_d/rfft1_d 修改路径)

Fixes #41, fixes #42, fixes #50, fixes #52, fixes #53, fixes #56, fixes #59, fixes #60

likedislike
Pull Request已成功合入, 合并人@CANN-robot
(感谢 syy_3597 的贡献)
Ssyy_3597
4 天前 创建了 pull request,commit df104a3c
Ssyy_3597
4 天前 关联了issue:build.sh: normalize_soc_name() 为死代码,且 sed 表达式会把末字符大写(如 ascend910 变成 Ascend91O),build.sh 帮助文档声称“当前仅支持 Ascend950”,与代码实际支持 Ascend910B/910_93/910/310P 等型号矛盾,【缺陷报告】空指针解引用 - 文件fft1_d_exec_api.cpp - 函数aclfftExecC2C_1D - 行号58,【缺陷报告】空指针解引用 - 文件fft1_d_c2c_mix.cpp - 函数aclfftFft1DC2CMix - 行号181,【缺陷报告】空指针解引用 - 文件fft2_d_dd.cpp - 函数aclfftFft2DDd - 行号110,【缺陷报告】数据类型截断 - 文件rfft1_d_dft.cpp - 函数aclfftRfft1DDft - 行号71,【缺陷报告】数据类型截断 - 文件rfft1_d_fast_dft.cpp - 函数aclfftRfft1D - 行号322,【缺陷报告】访问已释放内存 - 文件fft_plan_destroy_api.cpp - 函数aclfftDestroy - 行号32
atomgit-bot
atomgit-bot
4 天前 评论:

变更摘要

本 PR 修复 8 个 issue(#41/#42/#50/#52/#53/#56/#59/#60),涵盖构建脚本清理与文档同步、多个 FFT 接口的空指针防护、尺寸计算的数据类型截断,以及 aclfftDestroy 的 use-after-free 问题。核心改动包括:删除 build.sh 中无调用点的死代码 normalize_soc_name() 并同步帮助文档与实际支持的 SoC 型号列表;为 aclfftExecC2C_1DaclfftFft1DC2CMixaclfftFft2DDd 入口补充输入/输出指针判空;将 aclfftRfft1DDftaclfftRfft1D 中的尺寸计算从 uint32_t 提升为 size_t 并对操作数显式提升,避免大 batches 下中间结果溢出截断;移除 aclfftDestroy 中构成 UAF 的 is_destroyed 防重复销毁检查。验证在 Atlas 910B3 / CANN 9.1.0 环境下编译通过,42/42 测试全部 PASS。

主要改动

  • 构建脚本死代码清理与文档同步(#41/#42):删除 build.sh 中无调用点的 normalize_soc_name() 函数(其 sed 表达式与注释意图不符),并将头注释与 show_help() 的 Supported SoC models 更新为实际支持的列表(Ascend950/910B/910_93/910/310P),注明 Ascend310B 可识别但当前版本不支持构建。
  • 导出接口空指针防护(#50/#52/#53):在 aclfftExecC2C_1D(arch32,weak 符号可被外部直接调用)入口增加 ACLFFT_CHECK_PARAM(impl != nullptr && idata != nullptr && odata != nullptr) 校验;在 aclfftFft1DC2CMixaclfftFft2DDd 入口对 x/y 判空,为空时返回 ACL_ERROR_INVALID_PARAM,避免作为 aclrtMemcpy 源/目的地址被解引用。
  • 尺寸计算类型截断修复(#56/#59):aclfftRfft1DDftaclfftRfft1DinputSize/outputSize/dftMatrixSize/sysWorkspaceSize/tilingSize 全部由 uint32_t 改为 size_t,并对 batchesn 等操作数显式 static_cast 提升,防止 64 位乘积截断导致 aclrtMalloc 分配不足或中间结果回绕,正常范围内计算结果不变。
  • aclfftDestroy use-after-free 修复(#60):移除 is_destroyed 标志检查与置位——对象首次销毁即被 delete,标志随对象释放,二次调用读取已释放内存;改为保留 NULL 校验后直接 delete impl,重复销毁由调用方通过 *plan=nullptr 保证。
likedislike
atomgit-bot
atomgit-bot
4 天前 评论:

代码审查

✅ 未发现问题

likedislike
CANN-robotCANN-robot成员
4 天前 添加了label:cann-cla/yes
CANN-robot
CANN-robot成员
4 天前 评论:

Thanks for your pull-request.
The full list of commands accepted by me can be found at here.
You can get sig-info at here.
You can self-configure the PR merge rules for this repository. For more details, please refer to Here.
For more, you also can visit HICANN.


PR Approval Progress

Congratulations! All modules have met the lgtm and approve requirements.

Module Approval Details

module lgtm status approve status
repo-cann/ops-fft east_yang, 张浩 (2/2) east_yang, 张浩 (2/1)

💡 Tip:

  • Committer can comment /approve or /lgtm
  • Commenting /approve implies both code review (lgtm) and intent to merge (approve)

CLA Signature Pass

yang_3597, thanks for your pull request. All authors of the commits have signed the CLA. 👍

likedislike
syy_3597
4 天前 评论:

compile

likedislike
CANN-robotCANN-robot成员
4 天前 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
4 天前 评论:

流水线任务触发成功
任务链接 [b37bfa0d229c49858c1de569a4280ee6][流水线指导]

任务名称状态日志下载链接
Compile_Ascend_X86 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM ✅ SUCCESS >>>>> >>>>>
codecheck ❌ FAILED None
SCA ❌ FAILED >>>>>
antipoison ✅ SUCCESS >>>>>
Check_Pr ✅ SUCCESS >>>>>
pre_comment ✅ SUCCESS >>>>>
Compile_Ascend_X86_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_ubuntu24 ✅ SUCCESS >>>>> >>>>>
precommit ✅ SUCCESS >>>>>
codecheck_codestyle ✅ SUCCESS >>>>>
likedislike
CANN-robotCANN-robot成员
4 天前 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
4 天前 添加了label:ci-pipeline-failed
syy_3597
4 天前 评论:

retry

likedislike
syy_3597
4 天前 评论:

compile

likedislike
CANN-robotCANN-robot成员
4 天前 删除了label:ci-pipeline-failed
CANN-robotCANN-robot成员
4 天前 添加了label:ci-pipeline-running
CANN-robot
CANN-robot成员
4 天前 评论:

流水线任务触发成功
任务链接 [a2560197f6764fc3a939d4169fe710bb][流水线指导]

任务名称状态日志下载链接
Compile_Ascend_X86 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM ✅ SUCCESS >>>>> >>>>>
codecheck ✅ SUCCESS >>>>>
SCA ✅ SUCCESS >>>>>
antipoison ✅ SUCCESS >>>>>
Check_Pr ✅ SUCCESS >>>>>
pre_comment ✅ SUCCESS >>>>>
Compile_Ascend_X86_ubuntu24 ✅ SUCCESS >>>>> >>>>>
Compile_Ascend_ARM_ubuntu24 ✅ SUCCESS >>>>> >>>>>
precommit ✅ SUCCESS >>>>>
codecheck_codestyle ✅ SUCCESS >>>>>

[2026-08-25 15:38:37]    CI执行结束

likedislike
CANN-robotCANN-robot成员
4 天前 删除了label:ci-pipeline-running
CANN-robotCANN-robot成员
4 天前 添加了label:ci-pipeline-passed
east_yang成员
4 天前 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
4 天前 添加了label:approved
demoauguste成员
4 天前 评论:

/lgtm
/approve

likedislike
CANN-robotCANN-robot成员
4 天前 添加了label:lgtm
CANN-robotCANN-robot成员
4 天前 合入了pull request