Closed
【缺陷报告】数组索引越界 - 文件kernel_operator_data_copy_impl.h - 函数DataCopySliceGm2UBImpl - 行号551 #1541
zhangjunkai9Add on  Aug 19Closed at  Aug 19
zhangjunkai9
Aug 19 Create

缺陷信息

缺陷类型arrayIndexOutOfBounds (数组索引越界)
函数DataCopySliceGm2UBImpl
文件impl/basic_api/dav_l311/kernel_operator_data_copy_impl.h
行号551

缺陷描述

DataCopySliceGm2UBImpl 中偏移量累积公式 offsetSrc = offsetSrc + i * (blockLen * ONE_BLK_SIZE + srcStride) 存在错误:每次迭代累加 i*stride 而非 stride,导致偏移量以三角数增长(0, S, 3S, 6S, 10S...),而非预期的线性增长(0, S, 2S, 3S...)。当 blockCount>=3 时偏移量将超出预期,导致 dst + offsetDst/sizeof(T) 和 src + offsetSrc/sizeof(T) 指针越界访问。正确公式应为 offsetSrc += (blockLen * ONE_BLK_SIZE + srcStride) 或 offsetSrc = i * (blockLen * ONE_BLK_SIZE + srcStride)。

数据流证据

Source(问题源头)

impl/basic_api/dav_l311/kernel_operator_data_copy_impl.h:547-548 行 uint32_t offsetSrc = 0; uint32_t offsetDst = 0 初始化偏移量

Sink(问题爆发点)

impl/basic_api/dav_l311/kernel_operator_data_copy_impl.h:552 行 DataCopyGM2UBImpl(dst + offsetDst / sizeof(T), src + offsetSrc / sizeof(T), ...) 使用错误累积的偏移量进行指针算术,导致越界访问

传播路径:

# 文件 行号 说明
1 impl/basic_api/dav_l311/kernel_operator_data_copy_impl.h 549 for (uint32_t i = 0; i < intriParams.blockCount; i++) 循环变量 i 从0递增
2 impl/basic_api/dav_l311/kernel_operator_data_copy_impl.h 550 offsetSrc = offsetSrc + i * (blockLen * ONE_BLK_SIZE + srcStride) 错误累积:i=0→0, i=1→S, i=2→3S, i=3→6S(三角数增长)
3 impl/basic_api/dav_l311/kernel_operator_data_copy_impl.h 551 offsetDst = offsetDst + i * (blockLen * ONE_BLK_SIZE + dstStride) 同样错误累积
4 impl/basic_api/dav_l311/kernel_operator_data_copy_impl.h 552 dst + offsetDst/sizeof(T) 和 src + offsetSrc/sizeof(T) 使用错误偏移量进行越界指针算术(sink)

修复建议

for (uint32_t i = 0; i < intriParams.blockCount; i++) {
    offsetSrc += intriParams.blockLen * ONE_BLK_SIZE + intriParams.srcStride;
    offsetDst += intriParams.blockLen * ONE_BLK_SIZE + intriParams.dstStride;
    DataCopyGM2UBImpl(dst + offsetDst / sizeof(T), src + offsetSrc / sizeof(T), {1, intriParams.blockLen, 0, 0});
}
likedislike
shaonaiteshaonaiteCollaborators
Aug 19 Assign zhudi22 as responsible person
WwangrulongCollaborators
Aug 19 Associated pull request
CANN-robotCANN-robotCollaborators
Aug 19 Close issue
CANN-robotCANN-robotCollaborators
Aug 19 Added label: resolved