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


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