Versions Compared

Key

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

...

Blocking calls include, but are not limited to: network, file, and console I/O. This rule is a specific instance of CON36CON05-C. Do not perform operations that can block while holding a lock using POSIX threads.

Noncompliant Code Example

...

Code Block
bgColor#ccccff
langc
void thread_foo(void *ptr) {
  uint32_t num;
  int result;
  int sock;

  /* sock is a connected TCP socket */

  if ((result = recv(sock, (void *)&num, sizeof(uint32_t), 0)) < 0) {
    /* Handle Error */
  }

  if ((result = pthread_mutex_lock(&mutex)) != 0) {
    /* Handle Error */
  }

  /* ... */

  if ((result = pthread_mutex_unlock(&mutex)) != 0) {
    /* Handle Error */
  }
}

Compliant Solution (Use a

...

Nonblocking Call)

This compliant solution performs the recv() call with the parameter oMSG_nonblockDONTWAIT, which causes the call to fail if no messages are available on the socket:

Code Block
bgColor#ccccff
langc
void thread_foo(void *ptr) {
  uint32_t num;
  int result;

  /* sock is a connected TCP socket */

  if ((result = recv(sock, (void *)&num, sizeof(uint32_t), OMSG_NONBLOCKDONTWAIT)) < 0) {
    /* Handle Error */
  }

  if ((result = pthread_mutex_lock(&mutex)) != 0) {
    /* Handle Error */
  }

  /* ... */

  if ((result = pthread_mutex_unlock(&mutex)) != 0) {
    /* Handle Error */
  }
}

Exceptions

POS52-C-EX1: A thread may block while holding one or more locks and waiting to acquire another lock. When acquiring multiple locks, the order of locking must avoid deadlock, as specified in CON35-C. Avoid deadlock by locking in a predefined order.

...

Blocking or lengthy operations performed within synchronized regions could result in a deadlocked or an unresponsive system.

Rule

Severity

Likelihood

Remediation Cost

Detectable

Repairable

Priority

Level

POS52-C

low

Low

Probable

probable

No

high

No

P2

L3

Automated Detection

ToolVersionCheckerDescription
CodeSonar
Include Page
CodeSonar_V
CodeSonar_V
CONCURRENCY.STARVE.BLOCKINGBlocking in Critical Section
Helix QAC

Include Page
Helix QAC_V
Helix QAC_V

DF4966, DF4967
Klocwork
Include Page
Klocwork_V
Klocwork_V
CONC.SLEEP
Parasoft C/C++test
Include Page
Parasoft_V
Parasoft_V

CERT_C-POS52-a

Do not use blocking functions while holding a lock

Polyspace Bug Finder

Include Page
Polyspace Bug Finder_V
Polyspace Bug Finder_V

CERT C: Rule POS52-CChecks for blocking operation while holding lock (rule fully covered)
Security Reviewer - Static Reviewer

Include Page
Security Reviewer - Static Reviewer_V
Security Reviewer - Static Reviewer_V

RTOS_20Fully implemented

Related Guidelines

Key here (explains table format and definitions)

Taxonomy

Taxonomy item

Relationship

CERT C
The CERT Oracle Secure Coding Standard for Java
LCK09-J. Do not perform operations that can block while holding a lockPrior to 2018-01-12: CERT: Unspecified Relationship
CWE 2.11CWE-5572017-07-10: CERT: Rule subset of CWE

CERT-CWE Mapping Notes

Key here for mapping notes

CWE-557 and POS52-C

CWE-557 = Union( POS52-C, list) where list =


  • Concurrency issues besides blocking while holding a POSIX lock


Bibliography

...


...

Image ModifiedImage ModifiedImage Modified