CWE-366: Race Condition within a Thread(线程内的竞争条件)

 ID: 366

类型:基础
结构:简单

状态:草稿

描述

如果两个执行线程同时使用一个资源,则可能会在资源无效时使用资源,从而使执行状态未定义。

关联视图

与“研究层面”视图(CWE-1000)相关

与“开发层面”视图(CWE-699)相关

引入模式

阶段

说明

架构与设计

 

实现

 

应用平台

语言

C (出现的可能性不确定)

C++ (出现的可能性不确定)

Java (出现的可能性不确定)

C# (出现的可能性不确定)

后果

 

范围

冲击

可能性

完整性
其它

技术冲击: 修改执行逻辑; 未知状态

主要的问题是——如果一个锁被克服了——数据可能会在一个糟糕的状态下改变。

 

被利用的可能性:

一般

示例

例1

下面的例子说明了这个弱点。

(问题代码)

Example Language:

int foo = 0;
int storenum(int num) {

static int counter = 0;
counter++;
if (num > foo) foo = num;
return foo;

}

(问题代码)

Example Language: Java 

public classRace {

static int foo = 0;
public static void main() {


new Threader().start();
foo = 1;

}
public static class Threader extends Thread {


public void run() {

System.out.println(foo);

}

}

}

应对措施

阶段: 架构与设计

使用锁定功能。这是建议的解决方案。在代码周围实现某种形式的锁定机制,该机制在多线程环境中更改或读取持久性数据。

阶段: 架构与设计

创建资源锁定健全性检查。如果不存在固有的锁定机制,则在其他执行线程正在使用资源时,使用标志和信号来强制您自己的阻塞方案。

种属

关系

类型

ID

名称

属于

748

CERT C Secure Coding Standard (2008) Appendix - POSIX (POS)

属于

852

The CERT Oracle Secure Coding Standard for Java (2011) Chapter 9 - Visibility and Atomicity (VNA)

属于

882

CERT C++ Secure Coding Section 14 - Concurrency (CON)

属于

986

SFP Secondary Cluster: Missing Lock

属于

1142

SEI CERT Oracle Secure Coding Standard for Java - Guidelines 08. Visibility and Atomicity (VNA)

属于

1169

SEI CERT C Coding Standard - Guidelines 14. Concurrency (CON)

你可能感兴趣的:(漏洞检查)