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 は、sizeof キーワードが誤ってポインター ps に適用されている 7 行目にフラグを立てます。

セキュリティトレーニング

Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。