...
Dereferencing a null pointer is undefined behavior, typically abnormal program termination. In some situations, however, dereferencing a null pointer can lead to the execution of arbitrary code [Jack 2007, van Sprundel 2006]. The indicated severity is for this more severe case; on platforms where it is not possible to exploit a null pointer dereference to execute arbitrary code, the actual severity is low.
Rule | Severity | Likelihood | Remediation Cost | Priority | Level |
---|---|---|---|---|---|
EXP34-C | High | Likely | Medium | P18 | L1 |
Automated Detection
Tool | Version | Checker | Description | ||||||
---|---|---|---|---|---|---|---|---|---|
Astrée |
| null-dereferencing | Fully checked | ||||||
CodeSonar |
| LANG.MEM.NPD | Null pointer dereference | ||||||
Compass/ROSE |
Can detect violations of this rule. In particular, ROSE ensures that any pointer returned by | ||
| CHECKED_RETURN NULL_RETURNS REVERSE_INULL FORWARD_NULL | Finds instances where a pointer is checked against Identifies functions that can return a null pointer but are not checked Identifies code that dereferences a pointer and then checks the pointer against Can find the instances where | |||||||
Cppcheck |
| nullPointer, nullPointerDefaultArg, nullPointerRedundantCheck | Context sensitive analysis Detects when NULL is dereferenced (Array of pointers is not checked. Pointer members in structs are not checked.) Finds instances where a pointer is checked against Identifies code that dereferences a pointer and then checks the pointer against Does not guess that return values from | ||||||
Klocwork |
| NPD.CHECK.CALL.MIGHT |
LDRA tool suite |
| 45 D, 123 D, 128 D, 129 D, 130 D, 131 D, 652 S | Fully implemented | ||||||
Parasoft C/C++test |
|
|
| BD-PB-NP | Fully implemented | |||
Parasoft Insure++ |
Runtime analysis | |||
Polyspace Bug Finder | R2016a | Arithmetic operation with NULL pointer, Null pointer, Use of tainted pointer | Arithmetic operation performed on
Pointer from an unsecure source may be NULL or point to unknown memory |
PRQA QA-C++ |
2810, 2811, 2812, 2813, 2814, 2820, 2821, 2822, 2823, 2824 |
PRQA QA-C |
| 2810, 2811, 2812, 2813, 2814, 2820, 2821, 2822, 2823, 2824 | Fully implemented | ||||||
SonarQube C/C++ Plugin |
| S2259 |
Splint |
|
PVS-Studio | 6.22 | V522, V595, V664, V713, V1004 | General analysis rule set |
Related Vulnerabilities
Search for vulnerabilities resulting from the violation of this rule on the CERT website.
...
Key here (explains table format and definitions)
Taxonomy | Taxonomy item | Relationship |
---|---|---|
CERT Oracle Secure Coding Standard for Java | EXP01-J. Do not use a null in a case where an object is required | Prior to 2018-01-12: CERT: Unspecified Relationship |
ISO/IEC TR 24772:2013 | Pointer Casting and Pointer Type Changes [HFC] | Prior to 2018-01-12: CERT: Unspecified Relationship |
ISO/IEC TR 24772:2013 | Null Pointer Dereference [XYH] | Prior to 2018-01-12: CERT: Unspecified Relationship |
ISO/IEC TS 17961 | Dereferencing an out-of-domain pointer [nullref] | Prior to 2018-01-12: CERT: Unspecified Relationship |
CWE 2.11 | CWE-476, NULL Pointer Dereference | 2017-07-06: CERT: Exact |
CERT-CWE Mapping Notes
Key here for mapping notes
...
EXP34-C is a common consequence of ignoring function return values, but it is a distinct error, and can occur in other scenarios too.
Bibliography
[Goodin 2009] |
[Jack 2007] |
[Liu 2009] |
[van Sprundel 2006] |
[Viega 2005] | Section 5.2.18, "Null-Pointer Dereference" |
...
...