Open
【缺陷】ChamferDistance kernel 无块号防护+tiling零校验,非法块号/脏tiling导致3.4GB越界读 #230
xieyangyangAdd on 3 days ago
Sun
1 day ago Comments:
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报错


【缺陷】ChamferDistance kernel 无块号防护+tiling零校验,非法块号/脏tiling导致3.4GB越界读
问题描述信息
【环境信息】:
【预置条件】:
【重现步骤】:
cd <ops仓> && bash build.sh --jit --soc=ascend950 --ops=chamfer_distance
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:
触发用例: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)修复建议:
if (blockIdx < 0 || blockIdx >= tiling->realCoreNum) return;附件
责任田:张磊(目标仓:wangyueting/changwei)