CERT.CONC.ATOMIC_TWICE_EXPR

1 つの式でアトミック変数を 2 回参照しないでください。

脆弱性とリスク

アトミック変数に対する操作がアトミックであるべきときにアトミックでない場合、予期しないデータ競合が発生し、データの破損や制御フローの無効化につながる可能性があります。

脆弱コード例

atomic_int n = ATOMIC_VAR_INIT(0);
   
int compute_sum(void) {
  return n * (n + 1) / 2;
}

この非準拠コード例は、アトミックグローバル変数 n を受け取り、計算式 n * (n + 1) / 2 を使用して n + (n - 1) + (n - 2) + ...+ 1 を計算します。n の値は、式内の n についての 2 つのアトミック読み取りの間で異なる可能性があり、不正確な結果が返る可能性があります。