已关闭
【Bug】convolution_forward CheckDisContinuousStride 维度校验缺少 return,存在 vector 越界风险 #5705
zhoumin_创建于  22 天前关闭于  17 天前
zhoumin_
zhoumin_
22 天前 创建

问题描述

conv/convolution_forward/op_host/op_api/convolution_util.cpp 中 CheckDisContinuousStride 函数:

if (dims > totalDims) {
    OP_LOGE(ACLNN_ERR_RUNTIME_ERROR, "Invalid dims");
}
for (size_t i = 0; i < dims; i++) {
    if (viewStrides[i] != newStrides[i]) {
  1. dims > totalDims 时仅打印日志、未返回,防御形同虚设
  2. 后续循环按 dims 访问 viewStrides/newStrides,当任一 vector 长度小于 dims 时,std::vector::operator[] 越界,属于未定义行为(如 0 维/广播 tensor 的 viewStrides 为空场景)

修复方案

  • dims > totalDims 时打日志后 return false,调用方回退走正常 discontiguous 处理分支(安全回退,不影响正常 4D/3D 路径)
  • 顺带简化同文件 CheckDmaLimits:移除 opInfo 参数依赖,dtypeSize 改由 tensor->GetDataType() 查表获取;isNotDMA 同步移除 opInfo 形参,消除 CanSwitchC04 调用链默认传 nullptr 的隐患

复现步骤

构造 viewStrides 维度数小于传入 dims 的输入(如广播/0维 view)触发该分支。

likedislike
yuning_chenyuning_chen成员
22 天前 将 zhoumin_ 设为负责人
zhoumin_zhoumin_
17 天前 关联了pull request:fix(conv): remove opInfo dependency in CheckDmaLimits and get dtypeSize from tensor; fix potential out-of-bounds in CheckDisContinuousStride
zhoumin_zhoumin_
17 天前 issue状态由 进行中 改变为 已完成
zhoumin_zhoumin_
17 天前 关闭了 issue
CANN-robotCANN-robot成员
17 天前 添加了label:resolved