...
| 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" |
...