Double free()

Double free()

Double free() (doppelter Aufruf der Funktion free) bezeichnet einen Fehler in Computerprogrammen, wenn diese versuchen den gleichen Speicherbereich mehrmals freizugeben. Double free ist eine potentielle Sicherheitslücke. Der Name leitet sich von der Funktion zur Speicherfreigabe ab, die in vielen Sprachen wie z. B. C free heißt.

Inhaltsverzeichnis

Hintergründe

Wenn ein Programm dynamischen Speicher benötigt, fordert es diesen per malloc an, danach muss er per free wieder freigegeben werden. Wenn allerdings versucht wird, einen Speicherbereich mehrfach mittels free freizugeben, kommt es bei den meisten free-Implementierungen zu nicht definiertem Verhalten. Es kann möglich sein das Programm auf diesen Weg abstürzen zu lassen oder sogar an bestimmten Stellen in den Programm-Speicher zu schreiben, was zur Ausführung von beliebigem Code und Manipulation von Werten in Registern genutzt werden kann. Meist werden solche Situationen erreicht, wenn innerhalb von Signalhandlern oder anderem Code, der unter bestimmten Bedingungen mehrfach benutzt werden kann, Speicher-Freigaben erfolgen.

Weitere Informationen enthält der Artikel zu Speicherlecks, bei denen die gleichen Mechanismen zu Programmierfehlern führen.

Abhilfen

Da mehrfache Speicherfreigabe ein Fehler des Programmierers ist, lässt sich das Problem durch aufmerksames Programmieren und alle Vorgehensweise zum Aufspüren von Bugs finden.

Einige Programmierer setzen Zeiger nach der Speicherfreigabe auf null und prüfen an anderen Stelle, ob der Pointer der Nullzeiger ist.

void *ptr;    /* zeigt irgendwann auf Speicher von malloc() */
 
if (ptr) {
    free(ptr);
    ptr = NULL;
}

Allerdings behebt dieses Vorgehen nicht das Problem, wenn zwei Zeiger das gleiche Ziel haben. Wird bei einem der Speicher freigegeben und der Zeiger auf null gesetzt, so zeigt der zweite Zeiger immer noch auf den freigegebenen Speicher.

void *ptr;    /* zeigt irgendwann auf Speicher von malloc() */
 
void *ptr2 = ptr;
if (ptr2) {
    free(ptr2);   /* Speicher freigegeben auf den ptr und ptr2 zeigen */
    ptr2 = NULL;
}
 
/* Der Speicher wurde freigegeben, ptr ist aber nicht null! */
if (ptr) {
    free(ptr);    /* double free trotz Test */
    ptr = NULL;
}

Darüber hinaus gibt es auch Software wie Valgrind, um Speicheroperationen genauer zu untersuchen und somit bei der manuellen Suche zu unterstützen.

Intelligente Zeiger (Smart Pointers) verhindern, dass Speicher freigegeben wird, auf den noch andere Zeiger referenzieren. Die Zeiger auf einen Speicherbereich werden gezählt und erst wenn der letzte Zeiger freigegeben wird, erfolgt die tatsächliche Freigabe des Speichers.

Automatische Speicherbereinigung (Garbage Collection) ist eine weitere Möglichkeit doppelte Speicherfreigaben zu vermeiden. Garbage Collection löst viele Probleme mit der händischen Speicherverwaltung, ist aber besonders bei systemnaher Programmierung und in Echzeitanwendungen unerwünscht.

Andere Programmiersprachen als C

Die Funktion free ist nur in C, C++ und verwandten Sprachen existent, in der Programmiersprache Object Pascal (Borland Delphi) beispielsweise ist GetMem() / FreeMem() die Entsprechung zum Funktionspaar malloc() / free(). Zum Freigeben von Klassen wird dort zur Vermeidung dieses Problems ironischerweise statt des Destrukturs Destroy meist die Prozedur Free genutzt.

Programmiersprachen mit automatischer Speicherbereinigung wie Java oder Python kennen keine explizite Speicherfreigaben und haben deshalb auch keine Möglichkeit freigegebenen Speicher erneut freizugeben.

Weblinks


Wikimedia Foundation.

Игры ⚽ Нужно сделать НИР?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Double free — Double free() (doppelter Aufruf der Funktion free) bezeichnet einen Fehler in Computerprogrammen, wenn diese versuchen den gleichen Speicherbereich mehrmals freizugeben. Double free ist eine potentielle Sicherheitslücke. Der Name leitet sich von… …   Deutsch Wikipedia

  • Free running — is a physical art, in which participants (free runners) use the urban and rural areas to perform movements through its structures focused on freedom and beauty. It incorporates efficient movements from parkour, adds aesthetic vaults and other… …   Wikipedia

  • Double Dribble (video game) — Double Dribble Developer(s) Konami Publisher(s) …   Wikipedia

  • Double Exposure (band) — Double Exposure is an American Disco era band hailing from Philadelphia, USA Double Exposure’ are James Williams, Joseph Harris, Charles Whittington and Leonard ‘Butch’ Davis who were originally called ‘United Image’ back in the 1960’s. They have …   Wikipedia

  • Double Nickels on the Dime — Studio album by Minutemen Released July 1984 …   Wikipedia

  • Free-mo — stands for free modular and is a relatively new modular standard in the hobby of model railroading.Free mo is a derivation of FREMO, a European modular standard. Free mo s emphasis is on flexibility in track design and prototypical scenery and… …   Wikipedia

  • Double (singer) — Double Birth name 平澤貴子 Born March 14, 1975 (1975 03 14) (age 36) Origin Niigata, Japan Genres Contemporary R B, R B …   Wikipedia

  • Double Dragon (music producer) — Double Dragon is a Hip Hop/R B music production duo consisting of siblings Roy Chong and Elmo Chong also known as the Funk Seoul Brothers . Contents 1 Biography 2 The future 3 References 4 External links …   Wikipedia

  • Double, Double, Toil and Trouble — DVD cover Directed by Stuart Margolin …   Wikipedia

  • Double Live (Butthole Surfers album) — Double Live Live album by Butthole Surfers Released 1989 (vinyl) 1990 (CD) …   Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”