Disketten Fehler im Linux-Kernel bald Geschichte?
Inhaltsverzeichnis:
Wie man einen Arbeitsspeicher auf schnellstem Wege schrotten kann, zeigt dieser Artikel. Ein Leck im Speicher auf Systemen mit Linux-Installationen kann diesen nämlich unbrauchbar machen. Betroffen sind hierbei Linux-Ausgaben, welche mindestens die 5.11er Kernel-Version installiert haben. Dies geschieht, wenn der Befehl floppy_alloc_disk() bei der Diskettenlaufwerk Nutzung auftaucht und ein Disketten Fehler vermeldet wird. In einem der kommenden Linux-Updates soll in dem Zusammenhang die 6.2er Kernel-Version erscheinen, welche das Problem unter Linux ausmerzen soll.
Mit der Linux Kernel Version 5.17 wurde vor kurzer Zeit ein Problem behoben, was zu ärgerlichen Abstürzen führte, sobald ein Nutzer eine defekte Diskette aus dem Laufwerk herausgenommen hatte, währenddessen der PC Zugriff auf diese nehmen wollte. Ein Lesen der Diskette war folglich nicht mehr realisierbar. Mit dem Release der 5.18er Variante begann auch der Startschuss für das schnelle Ende eines Bestandteils, den man bisher in Anspruch nehmen konnte. Wo es einst einen Zugriff auf den Datenträger gab, welchen Fachleute auch als Raw Access bezeichneten, gibt es nun keine Basis mehr für diese Funktion.
Wegrationalisierung einer Funktion aus Sicherheitsgründen
Eine Deaktivierung dieser wurde nämlich in die Tat umgesetzt, die Nichtverfügbarkeit wird also in Zukunft zum Standard werden und dauerhaft sein. Der Grund für das Wegrationalisieren der Funktion wird damit begründet, dass ein Problem im Bereich der Sicherheit aufgetreten war. Hierbei wird öfters auch die Formulierung „use-after-free“ verwendet. Eine Beseitigung war scheinbar nicht gewollt oder realisierbar, also musste der unmittelbare Zugriff auf die Funktion deaktiviert werden.

Disketten im 3,5 Zoll-Format nutzen normalerweise „High Density“. Solche Speichermedien nutzen den Raw Access normalerweise nicht und sind zudem also kaum von diesem Umstand langfristig gezeichnet. Die Ansteuerung erfolgt bei diesen vielmehr über Controller. Einzig wenn einer der verbauten Controller das Format der Diskette nicht erkennen will, muss ein Zugriff der direkteren Art erfolgen.
Bei Disketten, welche auch bei Amigas oder Mac-Produkten zum Einsatz kommen, ist das beispielsweise so ein Fall. Der Raw Access kann bei älteren Diskettenmodellen also bei einem Disketten Fehler noch via Hand wiederherstellt werden, auch wenn diese Funktion bei vielen als überholt gilt. Irgendwann wird man im Kernel von Linux diesen Zugriff nicht mehr finden können. Wer weiterhin auf diese Art der Nutzung von Disketten setzen will, muss sich beeilen und Maßnahmen der Vorsorge treffen, um solche Medien auch in den kommenden Jahren noch für sich nutzen zu können.
Was bedeutet „use-after-free“ eigentlich?
Ein „Use-after-free“-Fehler entsteht, wenn ein Programm auf einen bereits freigegebenen Speicherbereich zugreift, der zuvor bereits freigegeben wurde. Der betreffende Speicher steht damit eigentlich wieder für andere Aufgaben bereit. Erfolgt trotzdem ein weiterer Zugriff, können Abstürze, beschädigte Daten oder Sicherheitsprobleme entstehen. Beim Linux-Floppy-Treiber trat genau eine solche Situation auf. Dabei spielte die Verarbeitung von `raw_cmd` eine entscheidende Rolle. Ein Teil des Treibers gab den Speicher frei, während ein anderer Bereich weiterhin darauf zugreifen konnte.
Beim Floppy-Treiber entstand das Problem durch gleichzeitig ablaufende Vorgänge. Während `raw_cmd_ioctl` den für `raw_cmd` reservierten Speicher freigab, konnte `seek_interrupt` noch auf diesen Bereich zugreifen. Dadurch entstand eine sogenannte Race Condition. Entdeckt wurde der Fehler unter anderem mithilfe des Kernel Address Sanitizers. Das Problem betraf damit nicht den physischen Arbeitsspeicher selbst, sondern die Speicherverwaltung innerhalb des Kernels. Die Entwickler reagierten schließlich mit Änderungen am Floppy-Treiber und der Einschränkung des direkten Zugriffs.
Was ist FDRAWCMD und wofür wurde es benötigt?
FDRAWCMD ist eine spezielle Schnittstelle des Linux-Floppy-Treibers. Sie ermöglicht es, direkte Befehle an den Diskettencontroller zu senden. Normalerweise übernimmt der Treiber viele dieser Abläufe automatisch. FDRAWCMD umgeht einen Teil dieser Abstraktion und erlaubt dadurch einen wesentlich direkteren Zugriff auf das Laufwerk. Interessant war diese Möglichkeit vor allem für ungewöhnliche Diskettenformate, kopiergeschützte Datenträger und andere Sonderfälle. Für gewöhnliche PC-Disketten im standardisierten Format wurde diese Funktion dagegen kaum benötigt.
Gerade dieser direkte Zugriff wurde jedoch zum Sicherheitsproblem. Im Zusammenhang mit FDRAWCMD entdeckten Entwickler einen Use-after-free-Fehler im Floppy-Code. Da die Schnittstelle ohnehin nur noch für wenige Spezialanwendungen benötigt wurde, entschied man sich gegen eine umfangreiche Überarbeitung. Stattdessen führte Linux die Kernel-Option `BLK_DEV_FD_RAWCMD` ein und deaktivierte die Funktion standardmäßig. Die entsprechende Änderung gelangte in Linux 5.18. Wer die Schnittstelle tatsächlich benötigte, konnte sie zunächst weiterhin gezielt aktivieren.
Welche Linux-Versionen waren betroffen?
Bei den Problemen mit dem Floppy-Treiber müssen zwei unterschiedliche Fehler voneinander getrennt werden. Das Speicherleck im Zusammenhang mit `floppy_alloc_disk()` befand sich seit Linux 5.11 im Kernel. Es konnte auftreten, wenn die Initialisierung des Floppy-Treibers an dieser Stelle scheiterte. Der dafür reservierte Speicher wurde unter bestimmten Umständen nicht ordnungsgemäß freigegeben. Für Linux 6.2 wurde eine entsprechende Korrektur vorbereitet. Zusätzlich war vorgesehen, die Änderung auch in unterstützte stabile Kernel-Versionen zurückzuportieren.
Davon unabhängig existierte das Sicherheitsproblem rund um FDRAWCMD. Hier handelte es sich nicht um das Speicherleck von `floppy_alloc_disk()`, sondern um einen Use-after-free-Fehler beim direkten Zugriff auf den Diskettencontroller. Als Konsequenz wurde FDRAWCMD mit Linux 5.18 standardmäßig deaktiviert. Beide Fehler betreffen somit denselben alten Floppy-Treiber, haben jedoch unterschiedliche Ursachen. Auch die vorgenommenen Gegenmaßnahmen unterscheiden sich: Das Speicherleck wurde korrigiert, während der problematische Raw-Zugriff standardmäßig abgeschaltet wurde.
Warum alte Diskettenformate Raw Access benötigen können
Nicht jede Diskette verwendet das klassische PC-Format mit der üblichen Anordnung von Spuren und Sektoren. Systeme wie Amiga oder ältere Macintosh-Computer nutzten teilweise eigene Aufzeichnungsverfahren und Diskettenformate. Solche Datenträger lassen sich deshalb nicht immer wie gewöhnliche DOS- oder PC-Disketten behandeln. Für spezielle Programme kann ein direkter Zugriff auf den Diskettencontroller notwendig sein. Dabei werden Befehle unmittelbar an die Hardware übermittelt, anstatt ausschließlich die normalen Funktionen des Linux-Floppy-Treibers zu verwenden.

Raw Access war deshalb besonders für Archivierung, Datenrettung und ungewöhnliche Datenträger interessant. Auch kopiergeschützte Disketten können spezielle Strukturen besitzen, die mit normalen Leseverfahren nicht vollständig erfasst werden. FDRAWCMD stellte unter Linux eine Möglichkeit bereit, entsprechende Befehle direkt an den Controller zu schicken. Genau solche nicht standardisierten Anwendungen nennt auch die damalige Begründung für die Schnittstelle. Für gewöhnliche Disketten war dieser Zugriff dagegen nicht erforderlich, weshalb seine standardmäßige Deaktivierung die meisten Linux-Nutzer kaum beeinträchtigte.
Disketten unter Linux heute noch verwenden
Disketten lassen sich grundsätzlich weiterhin unter Linux einsetzen. Der Kernel verfügt nach wie vor über einen eigenen Floppy-Treiber, der auch als Kernel-Modul geladen werden kann. Bei einem klassischen internen Laufwerk kommuniziert Linux über diesen Treiber mit dem Diskettencontroller. Die Kernel-Dokumentation beschreibt dafür weiterhin verschiedene Konfigurationsmöglichkeiten. Allerdings besitzen moderne Rechner meistens keinen entsprechenden Controller und keinen Anschluss für interne Diskettenlaufwerke mehr. In solchen Fällen greifen Nutzer häufig auf externe Laufwerke mit USB-Anschluss zurück.
USB-Diskettenlaufwerke sind bequem, besitzen gegenüber klassischen Laufwerken jedoch technische Einschränkungen. Die integrierte Elektronik übernimmt einen großen Teil der Steuerung und präsentiert das Gerät dem Betriebssystem weitgehend als gewöhnliches Laufwerk. Für Standarddisketten reicht das normalerweise aus. Schwieriger wird es bei ungewöhnlichen Formaten oder speziellen Aufzeichnungsverfahren. Direkte Low-Level-Befehle an einen klassischen Floppy-Controller sind über gewöhnliche USB-Laufwerke nicht in gleicher Weise möglich. Für historische Datenträger können deshalb ältere interne Laufwerke oder spezialisierte Hardware die bessere Lösung darstellen.
Datensicherung alter Disketten
Alte Disketten sollten möglichst früh gesichert werden, denn ihre magnetische Beschichtung altert und kann mit der Zeit Lesefehler entwickeln. Sinnvoll ist es, nicht nur einzelne Dateien zu kopieren, sondern nach Möglichkeit ein vollständiges Abbild des Datenträgers anzulegen. Ein solches Image bewahrt die vorhandenen Daten in einer einzigen Datei und lässt sich anschließend auf modernen Speichermedien archivieren. Nach erfolgreicher Sicherung muss die ursprüngliche Diskette nicht mehr regelmäßig verwendet werden, wodurch sich zusätzliche mechanische Belastungen vermeiden lassen.

Besondere Vorsicht ist bei ungewöhnlichen Diskettenformaten erforderlich. Ein gewöhnliches USB-Floppy-Laufwerk eignet sich vor allem für standardisierte PC-Disketten und kann bei exotischen Formaten schnell an technische Grenzen stoßen. Amiga-, Macintosh- oder kopiergeschützte Disketten benötigen unter Umständen einen direkteren Zugriff auf die Laufwerkshardware. Für wertvolle oder seltene Datenträger kann deshalb spezielle Hardware zur Diskettenarchivierung sinnvoll sein. Wichtig ist außerdem, die erzeugten Images mehrfach zu sichern und auf unterschiedlichen modernen Datenträgern aufzubewahren.
Wo man in der Gegenwart Disketten weiterhin erwerben kann
Auch zu Zeiten von USB, CD-ROM und Co. kann man immer noch Disketten verwenden. Genau wie Schallplatten sind diese nicht ausgestorben, selbst wenn die Bezugsquellen und Nutzungsmöglichkeiten hier geringer sind, als noch vor 25 Jahren. Seit mehr als 50 Jahren gibt es die Diskette als solche. IBM brachte 1971 die erste Diskette in den Umlauf. So brauchte man kaum noch Magnetbänder verwenden, welche Platz und viel Geld kosteten.
Die Diskette stellte somit eine portable sowie günstigere Variante dar. Floppy-Discs in verschiedenen Formaten und Speicherkategorien eroberten in der Folge die Welt. In zahlreichen online Shops, bei Ebay und Co. kann man weiterhin Disketten, auch im 3,5 Zoll Format, erwerben. Flohmärkte dienen ebenso als Bezugsquelle.