An object has a storage duration that determines its lifetime. There are three storage durations: static, automatic, and allocated.
Wiki Markup |
---|
According to C99 \[[ISO/IEC 9899:199914882-2003|AA. C++ References#ISO/IEC 989914882-19992003]\]: |
...
Section 3.8, "Object Lifetime" describes a number of situations in which trying to access an object outside of its lifetime leads to undefined behavior. |
Attempting to access an object outside of its lifetime can result in an exploitable vulnerability.
...
Code Block | ||
---|---|---|
| ||
const char *p; void dont_do_this(void) { const char str[] = ""This will change"";; p = str; /* dangerous */ /* ... */ } void innocuous(void) { const char str[] = ""Surprise, surprise""; } /* ... */ dont_do_this(); innocuous(); /* p might be pointing to ""Surprise, surprise"" */ |
As a result of this undefined behavior, it is likely that p
will refer to the string literal "Surprise, surprise"
after the call to the innocuous()
function.
...
Code Block | ||
---|---|---|
| ||
void this_is_OK(void) { const char str[] = ""Everything OK"";; const char *p = str; /* ... */ } /* p is inaccessible outside the scope of string str */ |
...
Code Block | ||
---|---|---|
| ||
const char *p; void is_this_OK(void) { const char str[] = ""Everything OK?"";; p = str; /* ... */ p = NULL; } |
...
Wiki Markup |
---|
\[[Coverity 07|AA. C++ References#Coverity 07]\] \[[ISO/IEC 9899:199914882-2003|AA. C++ References#ISO/IEC 989914882-19992003]\] Section 6.2.4, "Storage durations of objects," and Section 7.20.3, "Memory management functions" Sections 3.7, "Storage duration"; 3.8, "Object Lifetime" \[[Henricson 97|AA. C++ References#Henricson 97]\] Rule 5.9, "A function must never return, or in any other way give access to, references or pointers to local variables outside the scope in which they are declared." \[[Lockheed Martin 05|AA. C++ References#Lockheed Martin 05]\] AV Rule 111, "A function shall not return a pointer or reference to a non-static local object." \[[ISO/IEC PDTR 24772|AA. C++ References#ISO/IEC PDTR 24772]\] ""DCM Dangling references to stack frames"" \[[MISRA 04|AA. C++ References#MISRA 04]\] Rule 8.6 |
...