[VDR 2.6.7] heap-use-after-free [solved]

  • Ich habe sporadische, nicht reproduziere Crashs vom VDR beim Speichern der channel.conf, mit mir nicht wirklich hilfreichen Backtraces (unaligned fastbin chunk detected).

    Um dies weiter einzugrenzen habe ich VDR mal mit "-fsanitize=address" gebaut.

    Damit bekome ich kurz nach dem Start vom VDR reproduzierbar einen Abruch wegen "heap-use-after-free".

    Wenn ich die Commits schrittweise zurück gehe, wird das Problem mit diesem Commit eingeführt.

    kls Kann es sein, dass das Objekt, das mit "scanList->Del(ScanData);" gelöscht wird, vom EIT Scanner weiter verwendet wird ? Leider verstehe ich den Teil nicht gut genug, um einen Patch zu schreiben.

    Ob das Problem was mit meinem ursprüngichen Problem zu tun hat, ist auch nicht sicher, aber ein gelöschtes Objekt zu beschreiben kann alle möglichen Effekte haben.

  • Ich glaube, ich habe doch was gefunden:

    "scanList->Del(ScanData)" löscht das Element aus der Liste und in der for Schleife wird versucht mit "scanList->Next(ScanData)" den Nachfolger des gelöschten Objekts zu bekommen. Das wird dann zu heap-use-after-free.

    Hier mal eine Idee für einen Patch:


  • kfb77 Das dürfte an der Stelle

    Code
    if (Positioner->LastLongitude() != cSource::Position(Channel->Source()))
       continue;

    hängenbleiben, weil dann nicht weitergeschaltet wird.

    Vielleicht besser so:

  • hängenbleiben, weil dann nicht weitergeschaltet wird.

    Stimmt, da hätte auch noch ein "ScanData = scanList->Next(ScanData);" rein müssen.

    Deine Lösung ist kürzer.

    Habe es getestet, Fehler ist weg.

    Konntest du was mit dem Coredump vom Speichern der channel.conf anfangen ? Oder soll ich hoffen, dass das damit auch gelöst ist.

  • kfb77

    Changed the title of the thread from “[VDR 2.6.7] heap-use-after-free” to “[VDR 2.6.7] heap-use-after-free [solved]”.
  • OK, ich habe deinen Patch jetzt drin und wenn damit der channel.conf Crash trotzdem nochmals vorkommt, mache ich einen neuen Thread auf.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!