UNINIT.STACK.MUST

初期化されていない変数

UNINIT.STACK.MUST チェッカーは、非クラスタイプのローカル変数がまだ初期化されていないときにローカル変数が読み取られるインスタンスを検出します。

脆弱性とリスク

C++ では、スタック変数はデフォルトで初期化されていません。通常、スタックメモリの現在の内容の、ランダムなジャンクデータがスタック変数に含まれます。初期化されていないデータには、プログラムフローを意図しない方法で変更し、セキュリティに影響を及ぼす可能性のある値が含まれていることがあります。

軽減と防止

初期化の問題を回避するには、最初に使用する前に、すべての変数およびリソースが明示的に初期化されていることを確認します。複雑な条件の状況についてはメモをとり、すべてのパスに初期化が含まれていることを確認します。

脆弱コード例

コピー
  struct s {
    int a;
    int b;
  };
  
  int main() {
    struct s x;
    x.b = 0;
    return x.a;
 }

Klocwork は、まだ初期化されていないときに、初期化されていない変数 'x.a' の値が使用されることを示す 9 行目にフラグを立てます。