Open
【缺陷】ChamferDistance kernel 无块号防护+tiling零校验,非法块号/脏tiling导致3.4GB越界读 #230
xieyangyangAdd on  3 days ago
xieyangyangCollaborators
3 days ago Create

【缺陷】ChamferDistance kernel 无块号防护+tiling零校验,非法块号/脏tiling导致3.4GB越界读

问题描述信息

【环境信息】:

  • 设备信息:Ascend950DT_9584(执行机 176.176.1.234)
  • CANN信息:CANN 9.3.0(20261110)
  • torch环境信息:torch 2.14.0.dev20260811 / torch_npu 2.14.0.dev20261008
  • 测试框架:TTK 3.0.0 / mssanitizer 26.3.0

【预置条件】:

  • 算子包部署:bash build.sh --jit --soc=ascend950 --ops=chamfer_distance
  • 插桩编译:--compile-opts op_debug_config=sanitizer
  • mssanitizer wrap 执行

【重现步骤】:

  1. 构建算子包(含插桩):
    cd <ops仓> && bash build.sh --jit --soc=ascend950 --ops=chamfer_distance
  2. mssanitizer 包裹执行 TTK kernel 模式:
    mssanitizer --tool=memcheck --leak-check=yes --check-unused-memory=yes --
    /npu/miniconda3/envs/CI_py310_aclnn/bin/python3 -m ttk kernel
    -i chamferdistance_cases.csv --compile-opts op_debug_config=sanitizer
    --pc 1 --devices 0

【预期结果】:
无 mSAN ERROR(无越界读写)

【实际结果】:
mssanitizer memcheck 检出 6 条 ERROR,全部为 illegal read:

size 地址空间 block 根因
3,690,987,520 (3.4GB) PRIVATE aiv(0) tiling 字段脏数据直通 InitBuffer,UB 分配/取指越界
4,853,762 (4.6MB) PRIVATE aiv(0) 同上(UB 指针悬空)
53,161,986 (50MB) GM @0x0 aiv(65535) 块号越界(0xFFFF)未拦截,startTask 溢出致地址回卷
42,004,482 (40MB) GM @0x0 aiv(65535) 同上

触发用例:ChamferDistance_L0_001, shape=((2, 23363348, 4), (2, 23363348, 4)), dtype=float16

【用户影响】:
非法块号/脏 tiling 下 kernel 可产生最高 3.4GB 越界读,读到越界数据导致精度错误或未定义行为

【语句级定位】:

  • op_kernel/arch35/chamfer_distance_nd.h:285-288:Init 无 blockIdx 范围防护,startTask_ = blockIdx × tasksPerCore 在 blockIdx=65535 时溢出
  • op_kernel/arch35/chamfer_distance_nd.h:300-313:InitBuffer 直接取 tiling 字段做内存尺寸,static_cast<uint32_t> 无校验
  • op_kernel/arch35/chamfer_distance_nd.h:319-321:早退条件 startTask_ >= endTask_ 对越界块永不为真(endTask 恒等于 startTask+tasksPerCore)

修复建议:

  1. Init 顶部加 if (blockIdx < 0 || blockIdx >= tiling->realCoreNum) return;
  2. tiling 字段防御性校验:colsPerChunk ∈ [VL, UB容量上限]、queryTile ∈ [1, 合理上限]
  3. host 侧 CalUbSplit 后加 OPS_CHECK_IF 双保险

附件


责任田:张磊(目标仓:wangyueting/changwei)

likedislike
Sun
Sun
1 day ago Comments:

未能成功复现issue中提到的问题。
CANN信息:CANN 9.3.0(20261112)
设备信息:Ascend 950DT_9592
测试框架:11月13日最新克隆的TTK;mssanitizer 26.3.0.dev202611120100

多轮验证均只有WARNING: Unused memory of 512 byte(s),未见illegal read报错

likedislike