已关闭
[Bug] gemv_strided_batched 半精度路径 Cast 操作 UB buffer 越界风险 #309
yuyuanfeng创建于 7月13日关闭于 7月13日
7月13日 添加了label:bug
7月13日 将 yuyuanfeng 设为负责人
7月13日 修改标题为 “[Bug] gemv_strided_batched 半精度路径 Cast 操作 UB buffer 越界风险”,原标题为“[Bug|缺陷]: gemv_strided_batched 半精度路径 Cast 操作 UB buffer 越界风险”
7月13日 修改标题为 “[Bug] gemv_strided_batched 半精度路径 Cast 操作 UB buffer 越界风险”,原标题为“[Bug|缺陷]: gemv_strided_batched 半精度路径 Cast 操作 UB buffer 越界风险”
7月13日 修改了issue 的描述
7月13日 关闭了 issue
7月13日 添加了label:resolved
问题描述
gemv_strided_batched 算子(Ascend950 / arch35 平台)在非 FP32 半精度路径(FP16/HSH、HSS、TST/BF16、TSS)中,Cast 操作的 element count 向上对齐到 128 后可能超出 UB buffer 实际分配容量,存在 UB buffer 越界写风险。
具体问题位置:
InitUbuf():缺少maxVecEleNum >= outTile的初始化约束CastleYHalfToFloat():DataCopy经 32B 对齐后的cnt和castRepeatNum * ELENUM_REPEAT_FP16均可能超过maxVecEleNumCastleHalfToFloat():matCastRepeatNum * ELENUM_REPEAT_FP16可能超过maxMatEleNum同时 README 中 HSH/HSS/TST/TSS 四个接口缺少完整可运行的调用示例代码。
环境信息
影响范围
仅影响 gemv_strided_batched 算子(arch35),其他算子不受影响。
修复方案
InitUbuf()中maxVecEleNum取max(max(dotTile, 64), outTile)CastleYHalfToFloat()中cnt和castCnt以maxVecEleNum为上界 clampCastleHalfToFloat()中matCastCnt以maxMatEleNum为上界 clamp