已合并
fix: harden path validation in reselect_static_kernel_with_path #40493
rich创建于 7月8日
fix: harden path validation in reselect_static_kernel_with_path #40493
已合并
Pull Request已成功合入, 合并人@ascend-robot
(感谢 rich 的贡献)7月8日 关联了issue:[Feature]: 静态编译支持按进程隔离
atomgit-bot
7月8日 评论:
7月8日 评论:
变更摘要
此 PR 主要对 reselect_static_kernel_with_path 接口的路径参数进行了安全性加固:使用 realpath() 将用户输入的路径规范化为绝对路径后再进行校验和使用,防止路径遍历、符号链接等潜在风险;同时补充了相应的单元测试用例覆盖边界情况。
主要改动
- 路径解析与校验加固:在
Module.cpp的THNPModule_aclnn_reselect_static_kernel_with_path中,用realpath()替换原有的直接stat()调用,将输入路径解析为规范化的绝对路径abs_path,并将存在性检查与目录类型检查合并为一条TORCH_CHECK,错误信息从"path does not exist"改为"failed to resolve path"。 - 下游使用规范化路径:
Module.cpp中 lambda 捕获和后续ReselectStaticKernelWithPath调用均改用resolved_path(即realpath解析后的绝对路径),避免原始未验证路径被传递到后端。 OpInterface.cpp空指针检查位置修正:将aclnnReselectStaticKernelWithPathFunc的TORCH_CHECK空指针检查移入if块内部,仅在首次加载函数指针后立即校验,逻辑更紧凑。OpInterface.h注释简化:移除ReselectStaticKernelWithPath文档注释中“it need to be called once at process”的冗余描述。- 新增单元测试:在
test_npu_static_kernel.py中新增 4 个测试用例,覆盖传入非字符串类型、含空字节的路径、不存在的路径、以及文件而非目录等异常输入场景。


atomgit-bot
7月8日 评论:
7月8日 评论:
代码审查
经过对所有 4 个变更文件的逐行审查,包括:
- test/_inductor/test_npu_static_kernel.py:4 个新增测试方法均正确匹配对应 C++ 代码中的错误消息,异常类型、边界值覆盖完整。
- torch_npu/csrc/core/npu/interface/OpInterface.cpp:将
TORCH_CHECK移入if块内是正确的优化——仅在首次加载函数指针时检查,加载失败则通过TORCH_CHECK抛出,不会到达后续的空指针解引用;后续调用因指针非空直接跳过检查。 - torch_npu/csrc/core/npu/interface/OpInterface.h:仅修改注释,移除"仅需调用一次"的过时描述,与 PR 的进程级隔离目标一致。
- torch_npu/csrc/npu/Module.cpp:
realpath+PATH_MAX缓冲区进行路径规范化和存在性验证是安全的;空字节检测在前、目录类型检测在后,层次正确;lambda 按值捕获resolved_path保证异步安全;两分支均使用规范化后的绝对路径,消除了符号链接/相对路径绕过风险。
未发现任何正确性、安全性、可靠性或破坏性变更问题。
审查总结
- P0: 0
- P1: 0
- P2: 0
- P3: 0
整体风险评估:此变更风险极低,路径验证逻辑的强化(stat → realpath)和函数指针检查位置的修正是合理且安全的质量改进。新增测试覆盖了类型检查、空字节注入、路径不存在、文件/目录类型四个边界场景。无需阻塞合入。
⚠️ 已识别出整体风险,但无法提取行内评论,请参考整体评估。


ascend-robot
7月8日 评论:
7月8日 评论:
此处折叠了45条消息 查看更多
liujunzhu
7月8日 评论:
7月8日 评论:
/approve


7月8日 添加了label:approvedlgtm
7月8日 合入了pull request
【合入来源】
https://gitcode.com/Ascend/pytorch/issues/2634
https://gitcode.com/Ascend/pytorch/pull/40386
【修改方案】
1.路径规范化与解析增强: 在 Module.cpp 中,使用 realpath() 将用户输入的路径解析为绝对路径 abs_path,再基于 abs_path 进行 stat 存在性检查和 S_ISDIR 目录类型判断,并将解析后的路径传入后续的 lambda 和 API 调用,防止原始路径中的符号链接或相对路径绕过校验。
2.新增边界条件单元测试: 在 test_npu_static_kernel.py 中新增 4 个测试用例,分别覆盖路径非字符串、路径含空字节、路径不存在、路径为文件而非目录的场景,验证各类非法输入均抛出 RuntimeError。
3.函数指针判空逻辑调整: 在 OpInterface.cpp 的 ReselectStaticKernelWithPath 中,将 TORCH_CHECK 判空检查移入 if 分支内部,仅在函数指针未初始化时才执行校验,避免重复检查。
4.接口注释修正: 在 OpInterface.h 中移除了 ReselectStaticKernelWithPath 文档注释中“it need to be called once at process”的过时描述。
5.测试文件存量lint检查修正:去除未使用的import,修改一个重复定义bug。
【资料变更】
不涉及
【接口变更】
不涉及
【功能验证】
新增UT补充
(zrq_310_29) root@xxx:xxx# python /xxx/torch_npu/test/_inductor/test_npu_static_kernel.py /xxx/lib/python3.10/site-packages/torch_npu/_inductor/__init__.py:97: UserWarning: triton-ascend is not installed, install it first. warnings.warn("triton-ascend is not installed, install it first.") .......... ---------------------------------------------------------------------- Ran 10 tests in 0.593s OK【CheckList】