EN JP CN

UNINIT.HEAP.MIGHT

UNINIT.HEAP.MIGHT

初期化されていないヒープの使用の可能性があります

UNINIT.HEAP.MIGHT チェッカーは、使用前に初期化されていなかった可能性がある malloc で割り当てられるヒープメモリを検出します。

脆弱性とリスク

初期化されていないヒープメモリを使用すると、コードのパフォーマンスが大幅に不安定になる可能性があります。これは、所定のデータオブジェクトに割り当てられた値が、割り当てられたヒープメモリから無作為に選択され、以前に使用されたオブジェクトや、別のプロセスからのオブジェクトのステートを反映する可能性があるためです。ソフトウェアによりメモリが正しく初期化されない場合は、予期しない結果が発生し、セキュリティに影響を及ぼす可能性があります。

軽減と防止

ヒープメモリは、よく使用される割り当て関数 malloc() から返された直後は、常に初期化されていない状態です。初期化されていないメモリの問題を回避するには、最初に使用する前に、すべての変数およびリソースが明示的に初期化されていることを確認します。

または、割り当て済みメモリをすべてゼロに自動的に初期化する、標準の calloc() ライブラリ関数を使用します。

脆弱コード例

1  struct s {
2    int i;
3  };
4  
5  int f(struct s **v, int t) {
6    *v = (struct s *)malloc(sizeof(struct s));
7    if (t > 0) {
8      (*v)->i = t;
9    }
10   return (*v)->i;
11 }

Klocwork 変数 '(*v)->i' が、10 行目で初期化されないまま使用される可能性があることを示す 10 行目にフラグを立てます。この変数は、5 行目で割り当てられたメモリから値を取得します。

関連チェッカー