Pthread Mutual Exclusion mutual exclusion (Mutexmutex) locks are used to avoid simultaneous usage of common resources. There are several Several types of mutex locks are defined by pthreads which include : NORMAL, ERRORCHECK, RECURSIVE, and DEFAULT.
| Wiki Markup |
|---|
POSIX defines PTHREAD_MUTEX_NORMAL locks to have the following undefined behavior \[[Open Group 4|https://www.securecoding.cert.org/confluence/display/seccode/AA.+C+References#AA.CReferences-OpenGroup04] \]: |
This type of mutex does not provide deadlock detection. A thread attempting to relock this mutex without first unlocking it shall deadlock. An error is not returned to the caller. Attempting to unlock a mutex locked by a different thread results in undefined behavior. Attempting to unlock an unlocked mutex results in undefined behavior.
| Wiki Markup |
|---|
The DEFAULT mutex typepthread of pthreads is also generally mapped to PTHREAD_MUTEX_NORMAL, but is known to vary from platform to platform \[[SOL 10|http://docs.sun.com/app/docs/doc/816-5137/sync-28983?a=view] \]. UsageConsequently, of NORMAL locks should thusnot be avoidedused, and ERRORCHECK or RECURSIVE locks should be defined explicitly defined when using mutex locks are used. |
Noncompliant Code Example
The non compliant This noncompliant code example shows a simple mutex being created using PTHREAD_MUTEX_NORMAL. It should be noted that no return code is expected by the caller when NORMAL mutexes Note that the caller does not expect a return code when NORMAL mutex locks are used.
| Code Block | ||
|---|---|---|
| ||
pthread_mutexattr_t attr;
pthread_mutex_t mutex;
size_t const shared_var = 0;
int main(){
int rc =0;
rc = pthread_mutexattr_settype(&mutex, PTHREAD_MUTEX_NORMAL);
if(rc != 0){
/* Handle Error */
}
rc = pthread_mutex_init(&mutex, &attr);
if(rc != 0){
/* Handle Error */
}
pthread_mutex_lock(&mutex);
/* Critical Region*/
pthread_mutex_unlock(&mutex);
return 0;
}
|
Compliant Solution
The This compliant solution shows a pthread an ERRORCHECK mutex lock being created with type PTHREAD_MUTEX_ERRORCHECK where return codes will be available during locking and unlocking.
...
Risk Assessment
Using NORMAL pthread mutex locks can lead to deadlocks or abnormal program termination.
...
| Wiki Markup |
|---|
\[[Open Group 4|https://www.securecoding.cert.org/confluence/display/seccode/AA.+C+References#AA.CReferences-OpenGroup04] \] \[[SOL 10|http://docs.sun.com/app/docs/doc/816-5137/sync-28983?a=view] \] |