CVE-2026-80893 in Linux
Zusammenfassung
von VulDB • 04.09.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
mm/hugetlb: Behebung der Swap-Eintrag-Korruption beim Löschen von uffd-wp bei fork()
copy_hugetlb_page_range() löscht das uffd-wp-Bit von Migrations- und HW-Poison-Einträgen mit huge_pte_clear_uffd_wp(), welches an der Position des present-PTE-Bits operiert. Swap-Einträge speichern den uffd-wp-Zustand anderweitig – der Migrationszweig liest und setzt ihn über pte_swp_uffd_wp() und pte_swp_mkuffd_wp() –, während die present-PTE-Position in das Swap-Payload fällt. Auf x86-64 landet sie im invertierten Swap-Offset, wo ein natürlich ausgerichteter hugetlb-PFN immer das betroffene Bit gesetzt hat; daher führt das Löschen dazu, dass der codierte PFN um zwei Seiten vorgerückt wird.
Es muss kein userfaultfd beteiligt sein: Das Löschen ist nur dadurch geschützt, dass die VMA des Kindes nicht als uffd-wp registriert ist, sodass ein einfacher fork()-Aufruf mit einem laufenden hugetlb-Migrationseintrag (oder einer gehuwpoisoneten hugetlb-Seite) den in das Kind kopierten Eintrag korruptiert. Die Instrumentierung des Löschvorgangs und ein Fork nach MADV_HWPOISON auf einer 2 MB großen anonymen hugetlb-Seite zeigt:
offset before=120e00 offset after =120e02
Die Folgen sind meist latent: rmap-Walks stimmen Migrations-Einträge anhand des folio-Bereichs ab, und remove_migration_pte() baut das PTE aus dem folio wieder auf, sodass eine PFN-Abweichung innerhalb eines Folios nach Abschluss der Migration behoben wird. Jeder Pfad jedoch, der den korrupten Offset neu codiert – z. B. hugetlb_change_protection(), das einen beschreibbaren Migrations-Eintrag über make_readable_migration_entry(swp_offset(entry)) überschreibt –, propagiert die Korruption.
Migrations-Einträge tragen legitim uffd-wp; daher sollte dies mit pte_swp_clear_uffd_wp() gelöscht werden, entsprechend copy_nonpresent_pte() und move_huge_pte().
Ein HW-Poison-Eintrag trägt hingegen niemals das uffd-wp-Bit: Er wird frisch von make_hwpoison_entry() installiert (try_to_unmap_one() bewahrt uffd-wp auf dem hwpoison-Pfad nicht), und hugetlb_change_protection() lässt hwpoison-Einträge unverändert. Es gab dort nichts zu löschen, nur die Korruption; daher wird das Löschen vollständig entfernt.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.