INCORRECT.ALLOC_SIZE
不正确的分配大小
INCORRECT.ALLOC_SIZE 检查器发现调用 malloc、calloc 或 realloc 函数来分配内存,并且所分配内存大小都低于目标值的情况。当使用 sizeof 关键字来指定要分配的内存的大小时,通常会发生这种情况。不要使用实际类型作为 sizeof 运算符的参数,如果用错该类型的指针,则会导致 sizeof 返回指针的大小(在 32 位平台中,该值是 4)。
漏洞与风险
该情况会导致要分配的内存低于目标值,从而会导致意想不到的问题,如缓冲区溢出。
漏洞代码示例
复制
typedef struct S{
int a,b,c;
}tS, *pS;
void foo(int n) {
pS tmp1 = (pS) malloc(n * sizeof(pS));
free(tmp1);
}
Klocwork 标记了第 7 行,其中 sizeof 关键字被错误地应用至指针 ps。