Zum Inhalt springen

Linux 7.4 führt TAINT_FORCED_BIND für erzwungene Treiber-Bindungen ein

Linux 7.4 markiert den Kernel mit dem Taint-Flag Y, sobald die sysfs-Dateien bind oder unbind eines Treibers genutzt werden. Auslöser waren Berge nutzloser Fehlerberichte aus syzbot-Fuzzing.

Von Tech AI Wire Team

4 Min. Lesezeit

XLinkedIn
Part of Greg Kroah-Hartman's patch email in a monospace font, describing syzbot's fuzzing of the bind and unbind files and the new TAINT_FORCED_BIND flag.
Foto: Greg Kroah-Hartman's patch email, via The Mail Archive

Linux 7.4 wird jeden Kernel markieren, bei dem jemand einen Treiber von Hand an ein Gerät gebunden hat. Greg Kroah-Hartmans neues Flag TAINT_FORCED_BIND, angezeigt als Buchstabe Y, kennzeichnet Absturzberichte von Systemen, auf denen die sysfs-Dateien bind und unbind genutzt wurden. Fuzzing-Werkzeuge hatten diese Dateien benutzt, um Treiber auf ungeeignete Hardware zu zwingen. Das Ergebnis war eine Flut von Fehlerberichten, die für keinen echten Nutzer eine Rolle spielen.

Phoronix berichtete am 19. Oktober 2026, dass die Änderung im Driver-Core-Pull-Request für Linux 7.4 steckt. Dieser Pull Request wurde verschickt, bevor das Merge Window für 7.4 öffnete. Linux 7.3 erschien am 18. Oktober, und das Merge Window für 7.4, in dem neue Funktionen aufgenommen werden, öffnete am nächsten Tag.

Was TAINT_FORCED_BIND bewirkt

Ein Taint ist eine Markierung, die der Kernel an sich selbst setzt, wenn etwas Ungewöhnliches passiert ist. Sie wird in Absturzberichten ausgegeben. Ein Entwickler, der einen solchen Bericht liest, weiß dann, dass das System nicht in einem normalen Zustand war.

sysfs ist ein virtuelles Dateisystem, eingehängt unter /sys, das Kernel-Objekte als Dateien zeigt. Jeder Treiber hat eine „bind“- und eine „unbind“-Datei. Wer die Bus-ID eines Geräts hineinschreibt, bindet diesen Treiber von Hand an das Gerät oder löst ihn davon, erklärt Phoronix.

Kroah-Hartmans Patch setzt das neue Flag, „wenn jemals in die sysfs-Dateien bind/unbind geschrieben wird“, heißt es in seinem Cover Letter. „Das Flag ist ‚Y‘, das bisher ungenutzt war.“ Das Flag wird gesetzt, bevor der eigene bind- oder unbind-Code des Treibers läuft. Abstürze passieren oft in diesem Code, daher zeigt der resultierende Oops-Bericht, was versucht wurde. Ein Oops ist der Fehlerbericht des Kernels bei einem schweren Fehler.

DetailTAINT_FORCED_BIND
Taint-BuchstabeY
Gesetzt, wennIn die sysfs-Datei bind oder unbind eines Treibers geschrieben wird
ZeitpunktBevor der bind- oder unbind-Callback läuft
Enthalten inDem Driver-Core-Pull-Request für Linux 7.4
Verlauf des PatchesErstmals am 26. August veröffentlicht, v2 am 31. August, v3 am 4. September 2026
Geänderte Dateien8, darunter drivers/base/bus.c und kernel/panic.c

Warum syzbot die Änderung erzwang

Fuzzing bedeutet, ein Programm mit zufälligen oder unerwarteten Eingaben zu füttern, um Abstürze zu finden. syzbot ist ein automatischer Fuzzer, der gegen den Kernel läuft. Laut Kroah-Hartman wurde die bind-Schnittstelle „missbraucht und ist kürzlich durch Werkzeuge wie syzbot unter einen großen Fuzzing-‚Angriff‘ geraten“.

syzbot begann, Treiber an Geräte zu binden, für die sie nie geschrieben wurden. Kroah-Hartman schrieb, dass dies „jede Menge unnötiger Fehler und sinnloser Kernel-Patches“ von neuen Entwicklern verursacht habe. Die Schnittstelle sollte Kernel-Entwicklern helfen, schneller an Treibern zu arbeiten. Sie war auch „ein Weg zum Debuggen, mit dem Nutzer versuchen können, ein neues Gerät zu einem Treiber hinzuzufügen, ohne ihren Kernel neu bauen zu müssen“.

Nichts wird blockiert. Setups, die auf bind und unbind angewiesen sind, „werden weiterhin richtig funktionieren, aber jetzt wird der Kernel markiert“, heißt es im Cover Letter zu v3. Echte Use-after-free-Fehler, die so gefunden werden, „sollten trotzdem bearbeitet werden“. Ein Use-after-free-Fehler ist Code, der Speicher anfasst, nachdem er ihn freigegeben hat, eine klassische Quelle für Sicherheitslücken.

Kroah-Hartman sagte Fuzzer-Betreibern auch, was sie tun sollen. Werkzeuge ohne handgeschriebene Regeln sollten „mit aktiviertem panic_on_taint laufen, damit sie umfallen und nicht weitermachen“. Die Einstellung panic_on_taint hält den Kernel an, sobald er einen Taint erhält.

Fluten wenig wertvoller Berichte sind in diesem Jahr ein breiteres Problem. Google pausierte sein Bug-Bounty-Programm für Open Source am 1. Oktober nach einem Anstieg KI-generierter Einreichungen.

Widerstand von VFIO- und USB-Nutzern

Nicht jedem Reviewer gefiel der Kompromiss. Ein Review-Bot, sashiko-bot, stufte es als Bedenken der Stufe „High“ ein, dass legitime Setups nun als tainted markiert würden. Er nannte VFIO, das ein Gerät an eine virtuelle Maschine übergibt, sowie DPDK-Networking und USB over IP. Phoronix zählt Hardware-Resets und das Durchreichen von Geräten an eine virtuelle Maschine zu den legitimen Anwendungen.

In seiner Antwort an den Bot nannte Kroah-Hartman eine solche Nutzung „kein ‚Standard‘-Setup“ und „einen Missbrauch der API“. Armin Wolf merkte an, dass vfio-pci mit driver_override weiterhin bind und unbind braucht. Er schlug vor, den Taint stattdessen bei driver_override zu setzen. Kroah-Hartman antwortete, dass dabei erzwungene Entfernungen übersehen würden. „Es wird ein Taint-Flag gesetzt, es ist keine Panic“, schrieb er.

Johan Hovold nannte den Taint „einen guten Kompromiss“ im Vergleich dazu, mehr Komplexität einzubauen oder die Dateien zu verstecken. Er gab dem Patch die Tags Reviewed-by und Tested-by. Aaron Tomlin und Bradley Morgan prüften ihn ebenfalls.

Was das für Entwickler bedeutet

  • Prüfen Sie nach dem Umstieg auf Linux 7.4 Ihre Taint-Ausgabe. Wenn Sie Geräte für VFIO-Passthrough, DPDK oder USB over IP über sysfs neu binden, rechnen Sie mit dem Y-Flag. Es erscheint in /proc/sys/kernel/tainted und in Absturzberichten.
  • Erklären Sie das Y in Fehlerberichten. Maintainer könnten einen Bericht mit Y-Taint als Problem einer erzwungenen Bindung lesen und beiseitelegen. Wenn Ihr Fehler echt ist, schreiben Sie, wie Sie das Gerät binden und ob er auch ohne manuelle Bindung auftritt.
  • Fuzzer-Betreiber: Schalten Sie panic_on_taint ein. Das ist Kroah-Hartmans direkte Bitte an Werkzeuge, die ohne Ausschlussregeln in bind und unbind schreiben. Der Lauf stoppt bei der erzwungenen Bindung, statt einen Bericht zu erzeugen, um den sich niemand kümmern wird.
  • Treiber-Autoren: Abstürze zählen weiterhin. Laut Kroah-Hartman müssen echte Use-after-free-Fehler, die über bind und unbind erreicht werden, weiterhin behoben werden. Phoronix weist darauf hin, dass derselbe Driver-Core-Pull für 7.4 auch neue Rust-Ergänzungen für Kernel-Treiber bringt.
  • Beobachten Sie die finale Version von Linux 7.4. Wolf fragte, ob der Taint nur für Busse gelten könnte, die kein Hot-Plugging unterstützen. Jede solche Änderung würde den Kreis derer verkleinern, die das Y-Flag sehen.

Quellen

  1. TAINT_FORCED_BIND Sent In For Linux 7.4 To Deal With Major Fuzzing Attack - Phoronix
  2. [PATCH v2 0/2] driver core: add TAINT_FORCED_BIND for when userspace manually messes with devices and drivers - linux-trace-kernel mailing list
  3. [PATCH v3 0/2] driver core: add TAINT_FORCED_BIND for when userspace manually messes with devices and drivers - linux-modules mailing list
  4. Linux Kernel Introducing New Taint Due To Fuzzing Bots Yielding Impractical Bug Reports - Phoronix

Ähnliche Artikel