EN JP CN

FUM.GEN.MIGHT

FUM.GEN.MIGHT

未割り当てメモリの解放の可能性があります

未割り当てメモリが解放されると、予測できない結果になる可能性があります。FUM.GEN.MIGHT チェッカーは、初期化されていないポインターで呼び出されて使用される割り当て解除関数を検出します。

脆弱性とリスク

free() が無効なポインターで呼び出されると、プログラムのメモリを破壊してプログラムがクラッシュする結果になったり、攻撃に悪用される脆弱性をもたらす可能性があります。

軽減と防止

非ヒープメモリの解放を回避するには、以下を確実に行います。

  • 事前に malloc() を使用してヒープ上に割り当てられたポインターのみを解放します。
  • ポインターを追跡して、1 回だけ解放します。
  • プログラムの右側部分に属するメモリだけを解放します。

脆弱コード例

1  main(){
2    char * x = 1;
3    if (a) x= malloc(1);
4    free(x);
5  }

Klocwork は 4 行目で指摘レポートを生成し、'x' で参照され 2 行目で割り当てられるメモリが、3 行目の条件が false の場合に 4 行目で不正に解放される可能性があることを指摘します。未割り当てメモリを解放するとアプリケーションがクラッシュしたり、攻撃に対して脆弱になる可能性があります。

拡張機能

このチェッカーは、Klocwork knowledge base (ナレッジベース) を利用して拡張できます。詳細については、C/C++ 解析のチューニングを参照してください。