ungültige fastbin Eintrag (kostenlos)
Ich versuche, die Ursache zu finden für:
*** glibc detected *** ...: invalid fastbin entry (free): 0x00007fc384ced120 ***
Dem Programm weggeworfen Kern, so konnte ich nachvollziehen, diese wieder zu einem Destruktor eine sehr einfache Klasse, die ähnlich dieser:
class foo : public foo_base
{
...
...
std::vector<boost::weak_ptr<bar> > vec;
}
Der Destruktor virtuell ist, in foo_base
und nicht umgesetzt foo
Den Vektor vec
wird nur zugewiesen, um die im Konstruktor und nicht geändert danach.
Die Adresse von der glibc Fehler ist identisch zu vec._M_impl._M_start
-
Wo könnte ich anfangen nach der Ursache?
-
Wissen, was ein fastbin ist, wie kann es ungültig sein?
-
Könnte dies zu einem double-free-situation, oder würden glibc jeden Fall erhöhen eine
double free
in diesem Fall?
- Sie sind entweder Doppel-befreien Sie Ihre
foo
oder Sie speichern außerhalb von einige reservierten Speicher (also das schreiben in den Speicher, die verwendet wird, um "verwalten" die Zuweisungen).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist möglicherweise aufgrund eines Fehlers in
glibc
.Die RedHat-Ankündigungen sorgen für zusätzliche details:
https://rhn.redhat.com/errata/RHBA-2014-0480.html
Zu identifizieren, wenn Sie von diesem Fehler betroffen sind:
Wenn Ihre version von
glibc
ist2.12
ist und nicht ein.149
oder später suffix, dann wird Ihr server möglicherweise von diesem Problem betroffen sein.Zur "Antwort" meine Frage:
War ich in der Lage, um auszuschließen, eine "double free" - situation, denn es stellte sich heraus, dass alle
foo
Instanzen waren immer (richtig) gehalten, die in smart-Pointer.Einen memory-corruption bug wurde vor kurzem gefunden. Es ist unmöglich, dies zu bestätigen, wurde die Ursache für das ursprüngliche problem, aber es scheint vernünftig.
War das problem nie reproduzieren.