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) 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) 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:
October 29, 2009
|
|
CWE is a Software Assurance strategic initiative sponsored by the National Cyber Security Division of the U.S. Department of Homeland Security. This Web site is hosted by The MITRE Corporation. Contact cwe@mitre.org for more information. |
|||
