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。

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。