已关闭
[Bug-Report|缺陷反馈]: GE 认证插件缺少 GetSignLength 导出时触发空函数指针崩溃 #537
KaranocaVe创建于  2 天前关闭于  19 小时前
KaranocaVe
KaranocaVe
2 天前 创建

问题描述

DeployerAuthentication::AuthSign 在动态加载认证插件时获取 GetSignLength 函数指针,
但检查语句错误地再次检查了 GetSignData 指针。认证插件缺少必需的 GetSignLength
导出时,函数仍继续执行,并在生成签名后调用空的函数指针,导致调用进程异常终止,
而不是返回可诊断的认证失败状态。

环境信息

  • 仓库/commit:cann/ge / ffdcbc9f7496c17a98c1d12762c61ed608ef3503
  • OS/架构:Linux 5.10/aarch64
  • Ascend 硬件:Ascend 910B3
  • Driver/Toolkit/OPP:Driver 25.5.2;CANN Toolkit/OPP 9.1.0
  • 编译器和 Python:G++ 11.4.0;Python 3.12.13;CMake 3.22.1
  • 版本说明:本次只验证 host 动态符号处理路径,未宣称匹配版本 NPU 结果。

重现步骤

  1. 构建一个完整的认证插件,导出 NewSignResultDeleteSignResult
    DataFlowAuthSignGetSignDataGetSignLength,运行 AuthSign 作为成功对照。
  2. 在同一插件中只移除 GetSignLength 导出,保持其他符号和签名逻辑不变。
  3. 通过 DeployerAuthentication::Initialize 加载该插件,然后调用 AuthSign
  4. 观察返回值、退出码和回溯。

预期结果

检测到认证插件缺少 GetSignLength 时应返回 FAILED 并记录缺失符号,进程不应因
空函数指针调用而异常终止。

实际结果

完整插件返回 initialize_status=0auth_sign_status=0 sign_size=4,退出码为 0
只缺少 GetSignLength 的插件退出码为 139SIGSEGV),GDB 回溯显示在
DeployerAuthentication::AuthSignget_sign_len_proc(result) 调用处。

源码 dflow/deployer/deploy/deployer/deployer_authentication.cc:102-104 获取长度函数后,
第 103 行检查的是 get_sign_data_proc,不是 get_sign_len_proc;第 112 行随后无条件
调用后者。

日志/最小复现

Host 对照程序构建了两个仅相差一个导出的共享库。完整库运行退出码为 0;缺少
长度导出的库运行退出码为 139,调用栈顶为空函数指针,下一帧为 AuthSign

影响与规避方式

使用缺少必需导出的认证插件配置时,部署认证调用会直接终止进程,调用方无法获得
正常的失败返回值或执行清理逻辑。临时规避方式是确保插件同时导出全部认证接口;
实现侧应检查 get_sign_len_proc 本身并在缺失时返回错误。

建议的回归测试

增加动态符号完整性测试:完整插件的 AuthSign 应成功;分别缺少
NewSignResultDeleteSignResultDataFlowAuthSignGetSignData
GetSignLength 时均应返回 FAILED,进程退出码保持为 0,不得出现空函数指针调用。

likedislike
KaranocaVeKaranocaVe
2 天前 添加了label:bug-report
KaranocaVeKaranocaVe
2 天前 关联了pull request:[Fix] 修复 GE 认证插件缺少 GetSignLength 时的空函数指针调用
夏国正成员
2 天前 将 wuzheng-hw 设为负责人
wuzheng成员
1 天前 评论:

感谢反馈,问题已确认。第 103 行 copy-paste 错误导致检查了 get_sign_data_proc 而非 get_sign_len_proc,缺少导出时会在第 112 行触发空指针调用。我们将修正指针检查并补充动态符号完整性测试。

likedislike
Wwuzheng成员
1 天前 将 lining23666 设为负责人
Wwuzheng成员
1 天前 移除了负责人 wuzheng-hw
夏国正成员
1 天前 将 KaranocaVe 设为负责人
夏国正成员
1 天前 移除了负责人 lining23666
Llining23666成员
1 天前 关联了pull request:fix: 认证插件缺少GetSignLength导出时触发空函数指针崩溃(#537)
KaranocaVe
KaranocaVe
19 小时前 评论:

问题已由基于 develop 的 PR !4547 修复并合入 develop,修复内容覆盖 GetSignLength 空指针检查及动态符号完整性回归测试,现关闭该 Issue。

likedislike
KaranocaVeKaranocaVe
19 小时前 关闭了 issue