已关闭
【缺陷报告】数据类型截断 - 文件platform_ascendc.cpp - 函数GetResGroupBarrierWorkSpaceSize - 行号298 #1545
zhangjunkai9创建于 23 天前关闭于 17 天前
23 天前 将 chenyiyuan 设为负责人
chenyiyuan
22 天前 评论:
22 天前 评论:
你好,改为0并不能满足接口原本异常含义,且由于接口兼容性,无法将其修改至int32_t返回值,经讨论,预将在资料描述诸如UINT32_MAX表示接口异常状态,供用户进行使用前校验接口返回值是否为异常值,且UINT32_MAX从业务角度也无法会达到。


22 天前 将 jcmrn0930 设为负责人
17 天前 关闭了 issue
17 天前 添加了label:resolved
缺陷信息
缺陷描述
GetResGroupBarrierWorkSpaceSize 返回类型为 uint32_t,但在错误路径(socVersion != ASCEND910B)返回 -1。-1 隐式转换为 uint32_t 值 4294967295(UINT32_MAX)。调用方将该返回值作为工作空间大小使用(如 docs 示例中 size_t usrSize = 256 + ascendcPlatform.GetResGroupBarrierWorkSpaceSize()),可能导致约 4GB 的异常内存分配。
详细解释
经复核确认,第298行 return -1 在 uint32_t 返回类型函数中隐式转换为 4294967295,缺陷模式成立。PF_LOGE 仅记录日志不阻止错误返回值,无有效防护。函数为公有 API 接口,函数可达。与 GetResCubeGroupWorkSpaceSize 相同,触发条件为 socVersion != ASCEND910B,合法 SoC 版本即可触发,触发可满足。
数据流证据
传播路径:
调用链
可达调用链1 起点:
(entry functions)→ 终点:platform_ascendc::PlatformAscendC::GetResGroupBarrierWorkSpaceSize深度:0修复建议
uint32_t PlatformAscendC::GetResGroupBarrierWorkSpaceSize(void) const { auto socVersion = GetSocVersion(); if (socVersion == SocVersion::ASCEND910B) { return GROUP_BARRIER_WORK_SPACE_SIZE_910B; } else { PF_LOGE("get platform failed, socVersionStr is %d", socVersion); return 0; } }