Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Mutexes are used to protect shared data structures being accessed concurrently. The thread that locks the mutex owns it, and the owning thread should be the only thread to unlock the mutex. If the mutex is destroyed while still in use, there is no more protection of critical sections and shared data are no longer protected. This rule is a specific instance of  CON31-C. Do not unlock or destroy another thread's mutex using POSIX threads.

...

In this noncompliant code example, a race condition exists between a cleanup and a worker thread. The cleanup thread destroys the lock, which it believes is no longer in use. If there is a heavy load on the system, the worker thread that held the lock can take longer than expected. If the lock is destroyed before the worker thread has completed modifying the shared data, the program may exhibit unexpected behavior.

...

The risks of ignoring mutex ownership are similar to the risk of not using mutexes at all, which can result in a violation of data integrity.

Rule

Severity

Likelihood

Remediation Cost

Priority

Level

POS48-C

medium

Medium

probable

Probable

high

High

P4

L3

Automated Detection

Tool

Version

Checker

Description

section
CodeSonar

Fortify SCA

Section

V. 5.0

 

Sectioncan detect violations of this rule with CERT C Rule Pack
Include Page
CodeSonar_V
CodeSonar_V

CONCURRENCY.DU

Double Unlock

Helix QAC

Include Page
Helix QAC_V
Helix QAC_V

DF4971, DF4972, DF4981, DF4982


Parasoft C/C++test

Include Page
Parasoft_V
Parasoft_V

CERT_C-POS48-a
CERT_C-POS48-b

Do not destroy another thread's mutex
Do not release a lock that has not been acquired

Polyspace Bug Finder

Include Page
Polyspace Bug Finder_V
Polyspace Bug Finder_V

CERT C: Rule POS48-CChecks for destruction of locked mutex (rule fully covered)

Related Vulnerabilities

Search for vulnerabilities resulting from the violation of this rule on the CERT website.

Related Guidelines

...

Key here (explains table format and definitions)

Taxonomy

Taxonomy item

Relationship

CWE 2.11CWE-667, Insufficient locking2017-07-10: CERT: Rule subset of CWE

CERT-CWE Mapping Notes

Key here for mapping notes

CWE-667 and CON31-C/POS48-C

Intersection( CON31-C, POS48-C) = Ø

CWE-667 = Union, CON31-C, POS48-C, list) where list =


  • Locking & Unlocking issues besides unlocking another thread’s C mutex or pthread mutex.


Bibliography

...


...

Image ModifiedImage ModifiedImage Modified