CERT.CONC.ATOMIC_TWICE_EXPR
不要在表达式中重复引用原子变量。
漏洞与风险
当对原子变量的运算被假定为原子但实际上为非原子时,可能会发生意外的数据争用,从而导致数据损坏和控制流无效。
漏洞代码示例
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 的值可能会发生变化,从而产生不正确的结果。