CONC.SLEEP

调用关键部分的阻止函数

CONC.SLEEP 检查器可查找代码的关键部分中的阻止函数实例。

漏洞与风险

执行阻止函数前,锁定不会释放并且其他线程可能被阻止。这些情况可能导致意外行为,因此最好避免调用阻止函数。

漏洞代码示例

复制
  #include <pthread.h>
  
  void foo(pthread_mutex_t *mutex) {
    pthread_mutex_lock(mutex);
    sleep(30000);
    pthread_mutex_unlock(mutex);
  }

Klocwork 标记了第 5 行,指出当互斥在第 4 行被锁定时,对阻止函数的调用进入了睡眠状态。

相关检查器

安全培训

应用程序安全培训材料由 Secure Code Warrior 提供。

扩展

此检查器可进行扩展。相关的知识库记录类型包括:

  • CONC.LOCK
  • CONC.LOCK.TRY
  • CONC.UNLOCK
  • CONC.CONDSIGNAL
  • CONC.CONDWAIT

有关详情,请参阅调整 C/C++ 分析。