...
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 | ||||
|---|---|---|---|---|
| ||||
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 */
}
}
|
...
Blocking or lengthy operations performed within synchronized regions could result in a deadlocked or an unresponsive system.
Rule | Severity | Likelihood | Detectable | Remediation CostRepairable | Priority | Level |
|---|---|---|---|---|---|---|
POS52-C | Low | Probable | No | NoHigh | P2 | L3 |
Automated Detection
| Tool | Version | Checker | Description | ||||||
|---|---|---|---|---|---|---|---|---|---|
| CodeSonar |
| CONCURRENCY.STARVE.BLOCKING | Blocking in Critical Section | ||||||
| Helix QAC |
| DF4966, DF4967 | |||||||
| Klocwork |
| CONC.SLEEP | |||||||
| Parasoft C/C++test |
| CERT_C-POS52-a | Do not use blocking functions while holding a lock | ||||||
| Polyspace Bug Finder |
| CERT C: Rule POS52-C | Checks for blocking operation while holding lock (rule |
| fully covered) |
| Security Reviewer - Static Reviewer |
|
| RTOS_20 | Fully implemented |
Related Guidelines
Key here (explains table format and definitions)
...