已关闭
[Bug] gemv_strided_batched 半精度路径 Cast 操作 UB buffer 越界风险 #309
yuyuanfeng创建于  7月13日关闭于  7月13日
yuyuanfeng
yuyuanfeng成员
7月13日 创建

问题描述

gemv_strided_batched 算子(Ascend950 / arch35 平台)在非 FP32 半精度路径(FP16/HSH、HSS、TST/BF16、TSS)中,Cast 操作的 element count 向上对齐到 128 后可能超出 UB buffer 实际分配容量,存在 UB buffer 越界写风险。

具体问题位置:

  1. InitUbuf():缺少 maxVecEleNum >= outTile 的初始化约束
  2. CastleYHalfToFloat()DataCopy 经 32B 对齐后的 cntcastRepeatNum * ELENUM_REPEAT_FP16 均可能超过 maxVecEleNum
  3. CastleHalfToFloat()matCastRepeatNum * ELENUM_REPEAT_FP16 可能超过 maxMatEleNum

同时 README 中 HSH/HSS/TST/TSS 四个接口缺少完整可运行的调用示例代码。

环境信息

  • 芯片型号:Ascend 950
  • CANN 版本:9.1.0
  • SOC 编译选项:--soc=ascend950

影响范围

仅影响 gemv_strided_batched 算子(arch35),其他算子不受影响。

修复方案

  1. InitUbuf()maxVecEleNummax(max(dotTile, 64), outTile)
  2. CastleYHalfToFloat()cntcastCntmaxVecEleNum 为上界 clamp
  3. CastleHalfToFloat()matCastCntmaxMatEleNum 为上界 clamp
  4. README 补齐 HSH/HSS/TST/TSS 四个接口的完整调用示例
likedislike
yuyuanfengyuyuanfeng成员
7月13日 添加了label:bug
yuyuanfengyuyuanfeng成员
7月13日 将 yuyuanfeng 设为负责人
yuyuanfengyuyuanfeng成员
7月13日 修改标题为 “[Bug] gemv_strided_batched 半精度路径 Cast 操作 UB buffer 越界风险”,原标题为“[Bug|缺陷]: gemv_strided_batched 半精度路径 Cast 操作 UB buffer 越界风险”
yuyuanfengyuyuanfeng成员
7月13日 修改了issue 的描述
CANN-robotCANN-robot成员
7月13日 关闭了 issue
CANN-robotCANN-robot成员
7月13日 添加了label:resolved