Aus Linux-Magazin 04/2018

Kernel 4.16: Security-Patches, beschleunigte Dateizugriffe, Virtualbox-Gäste

© Périg MORISSE, 123RF

Große Überraschung im aktuellen Release-Zyklus: Es gibt auch jenseits von Spectre und Meltdown Neuerungen für Linux 4.16rc1. Darunter Updates am Inode-System, die den Zugriff auf Dateien beschleunigen, und die lang ersehnte Integration eines Treibers für Linux-Gäste auf Virtualbox.

Zunächst zum Elefanten im Raum: Die Nachrichtenflut zu Spectre und Meltdown ebbt zwar ein wenig ab, aber die jüngst bekannt gewordenen Sicherheitslücken halten die Admins weiterhin in Atem. Zu den Änderungen, die Kernelentwickler bereits in die Versionen 4.15.2 und 4.14.18 zurückportiert haben, gehören vor allem die bislang fehlenden Patches für Spectre (Version 1).

Dazu haben die Entwickler zunächst Code im Linux-Kernel gesucht und verändert, der es erlaubt, die spekulative Ausführung zu unterbinden. Dabei hilft ein eigens dafür entwickeltes Makro »array_lindex_nospec()«. Allerdings bleiben noch Baustellen.

Um den Linux-Kernel gegen Spectre (Version 2) zu schützen, fahren die Kernelhacker zweigleisig. Einerseits verwenden sie die selbst entwickelte Lösung Retpoline. Die verlangt vor allem auf älteren CPUs weniger Ressourcen als die von Intel in seine Microcode-Updates integrierten Prozessor-Flags IBRS (Indirect Branch Restricted Speculation), STIBP (Single Thread Indirect Branch Predictors) und IBPB (Indirect Branch Prediction Barrier). Unter anderem hatte Linus Torvalds diese Updates aufgrund der Performance-Einbrüche kritisiert.

Damit Retpoline richtig funktioniert, muss auch der zuständige Compiler die entsprechenden Optionen unterstützen. Das tut unter anderem der GCC ab Version 7.3 vom 24. Januar 2018. Er bringt die Schalter »-mindirect-branch«, »-mindirect-branch-loop«, »-mfunction-return« und »-mindirect-branch-register« mit, über die Entwickler die spekulative Ausführung abschalten.

Intels Microcode gebraucht

Retpoline funktioniert allerdings nicht in allen Fällen. Besonders Wechsel zwischen virtuellen Maschinen verlangen nach den von Intel bereitgestellten Flags, etwa IBPB. Nicht nur Linux 4.16rc1 verwendet sie, sondern auch die Versionen 4.15.2 und 4.14.18 – sofern Intel funktionierenden Microcode bereitstellt.

Seit dem 8. Februar 2018 gibt es Microcode-Updates für Skylake-Prozessoren. Zuvor hatte Intel fehlerhafte Aktualisierungen wieder zurückgezogen, nachdem Rechner häufig unvermittelt booteten oder gar nicht mehr starteten. Für CPUs der Haswell- und Broadwell-Reihe sind laut Intel Updates in Arbeit.

Gegen Meltdown gibt es bereits seit Anfang des Jahres Patches zur Page Table Isolation (PTI). Die haben Entwickler inzwischen verfeinert und auch für x86-Systeme in der 32-Bit-Version umgesetzt. Bis alle Distributionen diese Patches einpflegen und zur Verfügung stellen, dürfte aber noch einige Zeit vergehen. Admins prüfen über die Befehle

grep . /sys/devices/system/cpu/ vulnerabilities/*

wie sicher ihr System vor diesen Lücken bereits ist. Nebenbei haben die Kernelentwickler Process Context Identifiers (PCID) für Gastsysteme in Microsofts Virtualisierungslösung Hyper-V umgesetzt. Diese fangen die teils recht heftigen Leistungseinbußen durch die Meltdown-Patches zumindest teilweise ein.

Auch für IBMs System Z (»s390«) gibt es Patches gegen Spectre (Version 1 und 2). Die Codestücke gegen erstere heißen hier allerdings nicht Retpoline, sondern Expoline. Auf den Systemen gibt es keine »return«-Instruktionen, sondern es werden indirekte Branches für die Funktionsrückgabe genutzt. Indem der geänderte Code diese indirekten Codezweige neuerdings über EX- und EXRL-Instruktionen als Ziel aufruft, schaltet dies die Prediction für diese Zweige ab. Gegen Spectre 1 schützt hingegen die Funktion »array_index_mask_nospec()«.

Auch für ARMs 64-Bit-Systeme existieren inzwischen Patches für alle drei Schwachstellen.

Very trick, much wow!

Jenseits der Patches für Spectre und Meltdown haben die Kernelhacker auch an konventionellen Kernelfeatures geschraubt. So soll eine kleine Änderung an der Art und Weise, wie der Linux-Kernel die Inode-Verwaltung in Dateisystemen handhabt, einen großen Leistungszuwachs nach sich ziehen. Der wirkt sich insbesondere auf Lese- und Schreibzugriffe auf kleine Dateien aus.

Jeder Zugriff auf Inodes und Metadaten aktualisierte bislang auch das Feld »i_version« inkrementell. Allerdings stellte sich heraus, dass Programme »i_version« nur ganz selten auslesen. Red-Hat-Entwickler Jeff Layton hat den Kernelcode daher so angepasst [1], dass er den »i_version«-Wert nur dann erhöht, wenn zuvor ein Prozess auf diesen zugegriffen hat.

Laut Layton sorgt die kleine Änderung etwa beim Dateisystem XFS via Direct Access (Dax) für eine Leistungssteigerung von rund 240 Prozent bei 4-KByte-Schreibzugriffen. Das mildert auch ein wenig die Leistungseinbrüche durch die Retpoline-Patches ab.

SD-Zugriff beschleunigt

Ansonsten bleibt es bei den Dateisystemen vergleichsweise ruhig: Für XFS, Ext 4 und F2FS gibt es nur wenige Verbesserungen, das Gleiche gilt für das Block-Subsystem, unter anderem NVMe und B-Cache. Eine Ausnahme bildet ein Patch, das es dem Multimediacard-Subsystem genehmigt, das Multiqueue-Block-API zu verwenden. Das dürfte Zugriffe auf SD-Karten deutlich beschleunigen.

Das Netzwerk-Dateisystem Cifs (Common Internet File System) erlaubt den Zugriff auf Windows-Server. Es erhält in Kernel 4.16 eine experimentelle Unterstützung für SMB Direct (Server Message Block). Damit nutzt ein Client den Speicherdirektzugriff (DMA) des Servers beim Übertragen von SMB-Paketen. Das Network File System (NFS) kann jetzt per »statx()« lokal verfügbare Informationen abfragen, statt sie vom Server anzufordern.

Späte Gastfreundschaft

Seit einiger Zeit arbeitet der Red-Hat-Angestellte Hans de Goede daran, die von Oracle entwickelte Virtualisierungslösung Virtualbox an den Linux-Kernel anzupassen. Das gilt zumindest für die Treiber, die für den Betrieb von Linux als Gastsystem nötig sind.

Das Modul »vboxguest« hat es nach langer Zeit in den Kernel geschafft [2]. Es erlaubt etwa, Open-GL-Fähigkeiten der Grafikkarte an das Gastsystem durchzureichen, Copy & Paste zwischen Gast und Host zu nutzen und einzelne virtuelle Anwendungen in separaten Fenstern darzustellen – im so genannten Seamless-Modus.

Im nächsten Schritt will de Goede den Support für Shared Folders umsetzen, der den Datentausch zwischen Gast und Host erleichtert. Der Videotreiber »vboxvideo« bleibt hingegen vorerst im Staging-Bereich des Kernel. Offenbar überzeugte die Qualität des Codes die Kernelhacker noch nicht vollends.

IPX fliegt raus, Siox kommt

Im Staging-Bereich gelandet ist auch Code für Netwares IPX- und NCPFS-Netzwerkprotokolle. Allerdings könnte hier bereits Endstation sein, denn der Code ist alt. Niemand pflegt ihn und – noch wichtiger – niemand nutzt ihn mehr. Neu an Bord ist das Subsystem für das Bussystem Siox. Das setzt das Wiesbadener Unternehmen Eckelmann für seine Gebäude- und Kältetechnik ein.

Von Siemens stammt der Jailhouse-Hypervisor [3], der schlanker ausfallen soll als die Linux-eigene Kernel Virtual Machine (KVM). Er setzt seinen Fokus vor allem auf Echtzeit und Sicherheit. Mit dem aktuellen Kernel gibt es jetzt die Möglichkeit, Linux als Gastsystem ohne Rootrechte in den so genannten Jailhouse Cells laufen zu lassen.

Weniger AMD-Code

Nach zuletzt umfangreichen Code-Einreichungen ist es um den freien Treiber für AMD-Grafikkarten etwas ruhiger geworden. Der Display-Code unterstützt nun mehrere Bildschirme, ECC (Error Correcting Code) soll den Arbeitsspeicher von Vega-Karten unterstützen, die dieses Fehlerkorrekturverfahren nutzen.

Nach wie vor arbeiten die Entwickler an dem AMDKFD HSA genannten Treiber, der unter anderem das Mining auf AMDs Grafikkarten unter Linux verbessert. Die Heterogenous-System-Architektur ermöglicht es etwa, dass GPUs und CPUs auf einen gemeinsamen Adressraum im Arbeitsspeicher zugreifen, um die Leistung der Accelerated Processing Units (APUs) der Grafikkarte zu optimieren.

Die jetzt eingereichten Patches schaffen die Grundlage für die AMDKFD HSA, die voraussichtlich in den nächsten Linux-Kernel 4.17 Einzug hält. Daneben haben die Entwickler nach eigenen Angaben den umfangreichen Code weiter optimiert und aufgeräumt.

Nouveau unterstützt Geforce GT 1030

Der freie Nouveau-Treiber kann die Hardwarebeschleunigung für Grafikkarten der Geforce-GT-1030-Reihe von Nvidia jetzt mit einer für Secure Boot signierten Firmware nutzen. Für die Kepler-Chips der Geforce-600- und 700-Reihe gibt es per Clock-Gating die Möglichkeit, das Taktsignal der GPUs besser zu beeinflussen. In den nächsten Versionen des Linux-Kernels soll das auch für noch weitere Nvidia-Chips funktionieren. Nicht zuletzt verbessert der Intel-Treiber den Umgang mit den integrierten Grafikchips in Cannondale-CPUs.

Der Quellcode von Linux 4.16rc1 wartet wie gewohnt auf http://kernel.org. Läuft alles nach Plan, erscheint die finale Version Anfang April 2018.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 2 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Nach oben