CVE-2026-64130 in Linux
Zusammenfassung
von VulDB • 20.07.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
mm/page_alloc: Behebung der Initialisierung von Tags des großen Null-Folio mit init_on_free
Die Semantik von __GFP_ZEROTAGS ist derzeit etwas seltsam, aber effektiv wird dieses Flag nur zusammen mit __GFP_ZERO und __GFP_SKIP_KASAN gesetzt.
Wenn wir mit init_on_free laufen, werden Seiten während __free_pages_prepare() auf Null gesetzt, um das Zurücksetzen beim Allokationspfad zu überspringen.
Bei der Allokation mit gesetztem __GFP_ZEROTAG wird post_alloc_hook() jedoch nicht nur den Inhalt der Seite löschen, sondern auch die Tag-Speicherbereiche zurücksetzen unterlassen.
Das Nicht-Zurücksetzen von Tags durch __GFP_ZEROTAGS ist für die meisten Seiten irrelevant, die später über set_pte_at() in den Benutzerbereich gemappt werden: set_pte_at() und verwandte Funktionen erkennen, dass die Tags noch nicht initialisiert wurden (PG_mte_tagged nicht gesetzt), und initialisieren sie.
Für das große Null-Folio jedoch, das durch eine als speziell markierte PMD gemappt wird, findet diese Initialisierung nicht statt, wodurch beliebige Tags freigelegt werden, die für die Seiten beim Freigeben noch gesetzt waren.
Die Dokumentation (Documentation/arch/arm64/memory-tagging-extension.rst) besagt, dass Allokation-Tags auf 0 zurückgesetzt werden, wenn eine Seite zum ersten Mal in den Benutzerbereich gemappt wird. Dies gilt mit dem großen Null-Folio nicht mehr, wenn init_on_free aktiviert ist.
Behoben wird dies durch die Entkopplung von __GFP_ZEROTAGS von __GFP_ZERO und Übergabe an tag_clear_highpages(), ob auch der Seiteninhalt zurückgesetzt werden soll.
Die Bedeutung des Rückgabewerts von tag_clear_highpages() wurde invertiert, um klarere Semantik zu gewährleisten.
Reproduziert mit dem großen Null-Folio durch Modifizierung des check_buffer_fill arm64/mte Selbsttests zur Verwendung eines 2 MiB-Bereichs, nachdem sichergestellt wurde, dass Seiten beim Freigeben einen Nicht-0-Tag gesetzt haben (beachten Sie: Während des Bootens werden Tags nicht tatsächlich initialisiert, sondern nur KASAN_TAG_KERNEL in den Seitenflags gesetzt).
$ ./check_buffer_fill 1..20 ... not ok 17 Check initial tags with private mapping, sync error mode and mmap memory not ok 18 Check initial tags with private mapping, sync error mode and mmap/mprotect memory ...
Dieser Code benötigt weitere Bereinigungen; dies wird als Nächstes angegangen, wie z.B. die Entkopplung von __GFP_ZEROTAGS von __GFP_SKIP_KASAN.
[[email protected]: s/__GPF_ZERO/__GFP_ZERO/, gemäß David]
Be aware that VulDB is the high quality source for vulnerability data.