Login
Newsletter
Werbung

Fr, 12. November 2010, 11:02

Software::Entwicklung

Änderung in glibc deckt Fehler in Anwendungen auf

Eine Optimierung der Funktion memcpy in glibc hatte unerwartete Folgen. Software, die diesen Aufruf fehlerhaft verwendete, aber aufgrund eines Implementationsdetails dennoch korrekt funktionierte, arbeitete plötzlich nicht mehr richtig.

Die Funktion memcpy, die einen Speicherbereich an eine andere Adresse kopiert, darf nur verwendet werden, wenn sich Quell- und Zielbereich nicht überlappen. Übersieht ein Programmierer das, so können alle erdenklichen Fehler zur Laufzeit auftreten - in einigen Fällen kann das Kopieren aber dennoch funktionieren, so dass der Fehler unentdeckt bleibt.

Als glibc vor einigen Monaten eine neue Optimierung erhielt, wurden prompt einige Fehler in freien Programmen entdeckt, die schnell korrigiert waren. Den Entwicklern stehen auch ausreichend Tools zur Verfügung, um solchen Fehlern auf die Spur zu kommen, neben Präprozessor-Symbolen zum Debuggen insbesondere Valgrind.

Ende September wurde bekannt, dass die glibc-Änderung auch Probleme mit dem Flash-Plugin von Adobe verursacht: Der Sound von Videos einiger Webseiten klang auf einmal sehr schlecht. Das Problem ist nun, dass das Flash-Plugin proprietär ist und nur bei Adobe korrigiert werden kann. Erst jetzt wurde ein entsprechender Eintrag im Adobe-Bugtracker angelegt, und die Korrektur kann beliebig lange auf sich warten lassen.

In die Diskussion hat sich auch Linux-Initiator Linus Torvalds eingeschaltet. Er beklagte, dass durch die Änderung ein funktionierendes Programm beeinträchtigt wurde. Im Kernel würde so etwas nicht akzeptiert. Selbst wenn sich Programme auf nicht dokumentiertes oder undefiniertes Verhalten verlassen, das dann durch Zufall funktioniert, sei zu vermeiden, dass sie durch Änderungen beeinträchtigt werden. Er stellte fest, dass die Optimierung in einigen Fällen sogar eine Verlangsamung der Funktion zur Folge hätte. Die glibc-Entwickler dagegen behaupten, dass die Optimierung, die im Wesentlichen von Intel kam, vor allem auf Core i2- und Atom-Prozessoren eine erhebliche Beschleunigung bringe.

Die glibc- und Fedora-Entwickler sind offenbar nicht bereit, die Änderung zurückzunehmen, und haben den Fehlerbericht auf ungültig gesetzt. Benutzer des Flash-Plugins können sich, sofern sie betroffen sind, nur mit Workarounds behelfen, bis Adobe eine korrigierte Version bereitstellt.

Eigentlich sind sich alle Beteiligten einig, dass die Verwendung von memcpy an dieser Stelle im Flash-Plugin einen dummen Fehler darstellt und stattdessen memmove hätte aufgerufen werden müssen. Uneinigkeit herrscht allerdings in der Frage, ob die Änderung in glibc gerechtfertigt war. Theoretisch könnte glibc die Parameter von memcpy zur Laufzeit prüfen und eine Warnung ausgeben oder das Programm beenden. Die meisten Entwickler sprechen sich aber dagegen aus, weil dies viele Programme verlangsamen würde.

Werbung
Pro-Linux
Pro-Linux @Facebook
Neue Nachrichten
Werbung