Pull Request已成功合入, 合并人@CANN-robot
(感谢 syy_3597 的贡献)变更摘要
本 PR 修复 8 个 issue(#41/#42/#50/#52/#53/#56/#59/#60),涵盖构建脚本清理与文档同步、多个 FFT 接口的空指针防护、尺寸计算的数据类型截断,以及 aclfftDestroy 的 use-after-free 问题。核心改动包括:删除 build.sh 中无调用点的死代码 normalize_soc_name() 并同步帮助文档与实际支持的 SoC 型号列表;为 aclfftExecC2C_1D、aclfftFft1DC2CMix、aclfftFft2DDd 入口补充输入/输出指针判空;将 aclfftRfft1DDft 与 aclfftRfft1D 中的尺寸计算从 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)校验;在aclfftFft1DC2CMix与aclfftFft2DDd入口对x/y判空,为空时返回ACL_ERROR_INVALID_PARAM,避免作为aclrtMemcpy源/目的地址被解引用。 - 尺寸计算类型截断修复(#56/#59):
aclfftRfft1DDft与aclfftRfft1D中inputSize/outputSize/dftMatrixSize/sysWorkspaceSize/tilingSize全部由uint32_t改为size_t,并对batches、n等操作数显式static_cast提升,防止 64 位乘积截断导致aclrtMalloc分配不足或中间结果回绕,正常范围内计算结果不变。 aclfftDestroyuse-after-free 修复(#60):移除is_destroyed标志检查与置位——对象首次销毁即被delete,标志随对象释放,二次调用读取已释放内存;改为保留 NULL 校验后直接delete impl,重复销毁由调用方通过*plan=nullptr保证。


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
/approveor/lgtm- Commenting
/approveimplies 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. 👍


流水线任务触发成功
任务链接 [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 | >>>>> |


流水线任务触发成功
任务链接 [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执行结束


/lgtm
/approve


修复内容
本 PR 修复 8 个 issue:#41 #42 #50 #52 #53 #56 #59 #60
#41 build.sh 死代码与 sed 错误
删除无任何调用点的
normalize_soc_name()函数。其 sed 表达式s/.$/\U&/会把末字符转为大写(ascend910→Ascend91O),与注释意图不符,且属于死代码,直接清理。#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。验证
bash build.sh --soc=ascend910b编译通过bash build.sh --soc=ascend910b --run42/42 测试全部 PASS(覆盖 fft1_d/fft2_d/rfft1_d 修改路径)Fixes #41, fixes #42, fixes #50, fixes #52, fixes #53, fixes #56, fixes #59, fixes #60