...
Noncompliant Code Example
In the following this noncompliant code example, the programmer is targeting a custom piece of hardware that controls an LED by writing values into a register bank. The register bank is memory mapped into the process such that writing to a specific memory location will actually place a value into a hardware register to be read by the LED controller. The programmer intends to turn the LED on by placing value 1 into the first register, and then turn the LED off later by placing the value 0 into the first register.
...
| Code Block | ||||
|---|---|---|---|---|
| ||||
#include <stddef.h>
#include <stdint.h>
extern void get_register_bank(volatile int32_t **bank,
size_t *num_registers);
extern void external_wait(void);
void func(void) {
volatile int32_t bank[3];
size_t num_regs = 3;
get_register_bank((volatile int32_t **)&bank, &num_regs);
if (num_regs < 3) {
/* Handle error */
}
bank[0] = 1;
external_wait();
bank[0] = 0;
} |
Risk Assessment
Blah blah blahFailure to declare variables containing data that cannot be cached as volatile can result in unexpected runtime behavior resulting from compiler optimizations.
Recommendation | Severity | Likelihood |
|---|
Detectable | Repairable | Priority | Level |
|---|---|---|---|
DCL22-C | Low | Probable | No |
Yes |
P4 | L3 |
Automated Detection
Tool | Version | Checker | Description |
|---|
| LDRA tool suite |
|
|
|
| 8 D | Partially implemented | ||||||||
| Parasoft C/C++test |
| CERT_C-DCL22-a | Avoid unused values | ||||||
| Polyspace Bug Finder |
| Checks for write without a further read (rule partially covered) |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
Related Guidelines
| CERT C Secure Coding Standard | SIG31-C. Do not access shared objects in signal handlers |
| SEI CERT C++ |
| Coding Standard |
| VOID DCL20-CPP. Use volatile for data that cannot be cached | |
| MISRA C:2012 | Rule 2.2 (required) |
Bibliography
| [C99 Rationale 2003] | Subclause 6.7.3, "Type Qualifiers" |
...