已关闭
【缺陷报告】空指针解引用 - 文件test_dev_func_runner.h - 函数MemoryHelper::AllocZero - 行号96 #3016
zhangjunkai9创建于  8月18日关闭于  8月18日
zhangjunkai9
8月18日 创建

缺陷信息

缺陷类型nullptrDeref (空指针解引用)
函数MemoryHelper::AllocZero
文件framework/tests/st/utils/include/test_dev_func_runner.h
行号96

缺陷描述

AllocDev 函数在 totalSize 溢出(第71行)或 malloc 失败(第76行)时返回 nullptr,AllocZero 在第94行调用 AllocDev 后未对返回值 devPtr 做空指针校验,直接在第96行执行 memset(devPtr, 0, size),若 devPtr 为 nullptr 则导致空指针解引用崩溃。

数据流证据

Source(问题源头)

framework/tests/st/utils/include/test_dev_func_runner.h:63 行 uint8_t* AllocDev(size_t size, uint8_t** cachedDevAddrHolder) 函数入口,可在溢出或 malloc 失败时返回 nullptr

Sink(问题爆发点)

framework/tests/st/utils/include/test_dev_func_runner.h:96 行 memset(devPtr, 0, size) 解引用可能为 nullptr 的 devPtr

传播路径:

# 文件 行号 说明
1 framework/tests/st/utils/include/test_dev_func_runner.h 69-71 size_t totalSize = size + alignSize 溢出检查,若 totalSize < size 或 totalSize > 0x500000000 则 return nullptr
2 framework/tests/st/utils/include/test_dev_func_runner.h 75-78 uint8_t* rawPtr = (uint8_t*)malloc(totalSize) 若 malloc 失败则 return nullptr
3 framework/tests/st/utils/include/test_dev_func_runner.h 94 uint8_t* devPtr = AllocDev(size, nullptr) 接收可能为 nullptr 的返回值
4 framework/tests/st/utils/include/test_dev_func_runner.h 96 memset(devPtr, 0, size) 未经空检查直接解引用 devPtr(sink)

修复建议

uint8_t* AllocZero(uint64_t size, uint8_t** cachedDevAddrHolder)
{
    (void)cachedDevAddrHolder;
    uint8_t* devPtr = AllocDev(size, nullptr);
    if (devPtr == nullptr) {
        return nullptr;
    }
    if (isTest_)
        memset(devPtr, 0, size);
    else
        RuntimeMemset(devPtr, size, 0, size);
    return devPtr;
}
likedislike
杨旭
杨旭成员
8月18日 评论:

感谢参与 PyPTO 生态~,相关问题涉及具体模块代码实现细节,我将联系具体模块负责人,进行进一步确认处理~

likedislike
杨旭杨旭成员
8月18日 将 chengding888 设为负责人
杨旭
杨旭成员
8月18日 评论:

@chengding888 请协助看下对应实现,是否确实有问题,是否需要修改

likedislike
chengding888
chengding888成员
8月18日 评论:

@chengding888 请协助看下对应实现,是否确实有问题,是否需要修改

@DCGDDD

好的

likedislike
chaizhengtongchaizhengtong成员
8月18日 关联了pull request:fix(test): Add nullptr check.
Zzhangjunkai9
8月18日 issue类型由 任务 改变为 缺陷
Zzhangjunkai9
8月18日 issue状态由 待办的 改变为 已解决
Zzhangjunkai9
8月18日 关闭了 issue
CANN-robotCANN-robot成员
8月18日 添加了label:resolved