|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CWE-590: Free of Memory not on the Heap
Description Summary The application calls free() on a pointer to memory that was not allocated using associated heap allocation functions such as malloc(), calloc(), or realloc().
Extended Description When free() is called on an invalid pointer, the program's memory management data structures may become corrupted. This corruption can cause the program to crash or, in some circumstances, an attacker may be able to cause free() to operate on controllable memory locations to modify critical program variables or execute code.
Example 1 In this example, an array of record_t structs, bar, is allocated automatically on the stack as a local variable and the programmer attempts to call free() on the array. The consequences will vary based on the implementation of free(), but it will not succeed in deallocating the memory. (Bad Code) Example
Language: C void foo(){ record_t bar[MAX_SIZE];
/* do something interesting with bar */
...
free(bar);
} This example shows the array allocated globally, as part of the data segment of memory and the programmer attempts to call free() on the array. (Bad Code) Example
Language: C record_t bar[MAX_SIZE]; //Global var void foo(){ /* do something interesting with bar */
...
free(bar);
} Instead, if the programmer wanted to dynamically manage the memory, malloc() or calloc() should have been used. (Good Code) void foo(){ record_t *bar =
(record_t*)malloc(MAX_SIZE*sizeof(record_t));
/* do something interesting with bar */
...
free(bar);
} Additionally, you can pass global variables to free() when they are pointers to dynamically allocated memory. (Good Code) record_t *bar; //Global var void foo(){ bar = (record_t*)malloc(MAX_SIZE*sizeof(record_t));
/* do something interesting with bar */
...
free(bar);
}
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Page Last Updated:
February 20, 2013
|
|
CWE is co-sponsored by the office of Cybersecurity and Communications at the U.S. Department of Homeland Security. This Web site is sponsored and managed by The MITRE Corporation to enable stakeholder collaboration. Copyright © 2006-2013, The MITRE Corporation. CWE, CWSS, CWRAF, and the CWE logo are trademarks of The MITRE Corporation. Contact cwe@mitre.org for more information. |
|||



