...
| Code Block | ||||
|---|---|---|---|---|
| ||||
#include <threads.h>
int account_balance;
mtx_t flag;
/* Initialize flag */
int debit(unsigned int amount) {
if (mtx_lock(&flag) == thrd_error) {
return -1; /* Indicate error */
}
account_balance -= amount; /* Inside critical section */
if (mtx_unlock(&flag) == thrd_error) {
return -1; /* Indicate error */
}
return 0;
}
|
Compliant Solution (Critical Section, Windows)
This compliant solution uses a Microsoft Windows critical section object to make operations involving account_balance atomic. [MSDN]
| Code Block | ||||
|---|---|---|---|---|
| ||||
#include <Windows.h>
static volatile LONG account_balance;
CRITICAL_SECTION flag;
/* Initialize flag */
InitializeCriticalSection(&flag);
int debit(unsigned int amount) {
EnterCriticalSection(&flag);
account_balance -= amount; /* Inside critical section */
LeaveCriticalSection(&flag);
return 0;
}
|
Risk Assessment
Recommendation | Severity | Likelihood | Remediation Cost | Priority | Level |
|---|---|---|---|---|---|
CON02-C | Medium | Probable | Medium | P8 | L2 |
...