...
SIG31-C-EX1: The C Standard, 7.14.1.1 paragraph 5 [ISO/IEC 9899:20112024], makes a special exception for errno when a valid call to the signal() function results in a SIG_ERR return, allowing errno to take an indeterminate value. (See ERR32-C. Do not rely on indeterminate values of errno.)
the signal function with the first argument equal to the signal number corresponding to the signal that caused the invocation of the handler. Furthermore, if such a call to the signal function results in a SIG_ERR return, the object designated by errno has an indeterminate representation.
Risk Assessment
Accessing or modifying shared objects in signal handlers can result in accessing data in an inconsistent state. Michal Zalewski's paper "Delivering Signals for Fun and Profit" [Zalewski 2001] provides some examples of vulnerabilities that can result from violating this and other signal-handling rules.
Rule | Severity | Likelihood | Detectable | Remediation CostRepairable | Priority | Level |
|---|---|---|---|---|---|---|
SIG31-C | High | Likely | Yes | HighNo | P9P18 | L2L1 |
Automated Detection
Tool | Version | Checker | Description | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Astrée |
| signal-handler-shared-access | Partially checked | ||||||||
| Axivion Bauhaus Suite |
| CertC-SIG31 | |||||||||
| CodeSonar |
| CONCURRENCY.DATARACE | Data race | ||||||||
| Compass/ROSE | Can detect violations of this rule for single-file programs | ||||||||||
| Cppcheck Premium | 24.9.0 | premium-cert-sig31-c | |||||||||
| Helix QAC |
| C2029, C2030 C++3854, C++3855 | |||||||||
| LDRA tool suite |
| 87 D | Fully implemented | ||||||||
| Parasoft C/C++test |
| CERT_C-SIG31-a | Properly define signal handlers | ||||||||
| PC-lint Plus |
| 2765 | Fully supported | ||||||||
| CERT C: Rule SIG31-C | Checks for shared Shared data access within signal handler | Access or modification of shared data causes inconsistent state | (rule partially covered) | |||||||
| RuleChecker |
| signal-handler-shared-access | Partially checked |
...
Taxonomy | Taxonomy item | Relationship |
|---|---|---|
| ISO/IEC TS 17961:2013 | Accessing shared objects in signal handlers [accsig] | Prior to 2018-01-12: CERT: Unspecified Relationship |
| CWE 2.11 | CWE-662, Improper Synchronization | 2017-07-10: CERT: Rule subset of CWE |
| CWE 2.11 | CWE-828, Signal Handler with Functionality that is not Asynchronous-Safe | 2017-10-30:MITRE:Unspecified Relationship 2018-10-19:CERT:Rule subset of CWE |
CERT-CWE Mapping Notes
Key here for mapping notes
...
- Improper synchronization of files between programs (enabling TOCTOU race conditions
CWE-828 and SIG31-C
CWE-828 = SIG31-C + non-async-safe things besides shared objects.
...
| [C99 Rationale 2003] | 5.2.3, "Signals and Interrupts" |
| [ISO/IEC 9899:20112024] | Subclause 7.14.1.1, "The signal Function" |
| [Zalewski 2001] |
...