...
| 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
Bibliography
| [C99 Rationale 2003] | Subclause 6.7.3, "Type Qualifiers" |
...
...