UNINIT.HEAP.MIGHT
初期化されていないヒープの使用の可能性があります
UNINIT.HEAP.MIGHT チェッカーは、使用前に初期化されていなかった可能性がある malloc で割り当てられるヒープメモリを検出します。
脆弱性とリスク
初期化されていないヒープメモリを使用すると、コードのパフォーマンスが大幅に不安定になる可能性があります。これは、所定のデータオブジェクトに割り当てられた値が、割り当てられたヒープメモリから無作為に選択され、以前に使用されたオブジェクトや、別のプロセスからのオブジェクトのステートを反映する可能性があるためです。ソフトウェアによりメモリが正しく初期化されない場合は、予期しない結果が発生し、セキュリティに影響を及ぼす可能性があります。
軽減と防止
ヒープメモリは、よく使用される割り当て関数 malloc() から返された直後は、常に初期化されていない状態です。初期化されていないメモリの問題を回避するには、最初に使用する前に、すべての変数およびリソースが明示的に初期化されていることを確認します。
または、割り当て済みメモリをすべてゼロに自動的に初期化する、標準の calloc() ライブラリ関数を使用します。
脆弱コード例
コピー
struct s {
int i;
};
int f(struct s **v, int t) {
*v = (struct s *)malloc(sizeof(struct s));
if (t > 0) {
(*v)->i = t;
}
return (*v)->i;
}
Klocwork は、変数 '(*v)->i' が、10 行目で初期化されないまま使用される可能性があることを示す 10 行目にフラグを立てます。この変数は、5 行目で割り当てられたメモリから値を取得します。