CVE-2026-99000 in Linuxinfo

Zusammenfassung

von VulDB • 23.10.2026

Im Linux-Kernel wurde folgende Schwachstelle behoben:

drm/xe: Korrektur der doppelten Subtraktion in der Shrinker-Buchhaltung bei verschachtelten externen Pins (Pins)

xe_bo_pin_external() und xe_bo_unpin_external() unterstützen verschachtelte Pins, da die zugrunde liegenden Funktionen ttm_bo_pin()/ttm_bo_unpin() eine pin_count-Referenzzahl statt eines booleschen Werts pflegen. Allerdings werden die Aufrufe zur Shrinker-Buchhaltung (xe_ttm_tt_account_subtract() und xe_ttm_tt_account_add()) bedingungslos bei jedem Pin_external()-/Unpin_external()-Auufgerufen, anstatt nur beim Übergang in den gepinnten Zustand bzw. aus diesem heraus aufgerufen zu werden.

Ein externer BO (dma-buf) kann mehrmals gepinnt werden, während er bereits gepinnt ist, beispielsweise wenn er mehrere Attachments/Importer hat, die jeweils unabhängig xe_bo_pin_external() aufrufen. Jeder solche verschachtelte Pin subtrahiert die Seiten des BO erneut von der Shrinker-Buchhaltung, obwohl die Seiten des BO durch den ersten Pin bereits aus der Betrachtung entfernt wurden. Entsprechend werden sie bei jedem verschachtelten Unpin wieder hinzugefügt, bevor der BO tatsächlich entpinnt wird. Dies führt zu einer Desynchronisierung der Page- und Objektzählungen des Shrinkers von der Realität. Da diese als signed long deklariert sind, aber in xe_shrinker_count() als unsigned long interpretiert werden, kann ein Underflow (Unterlauf) in eine enorme Anzahl an shrinkable/purgeable Pages umschlagen, was dazu führt, dass der Shrinker unter Speicherdruck übermäßig aufgerufen wird.

Die Buchhaltungsaufrufe müssen mit denselben Pin-Count-Übergangsprüfungen geschützt werden, die bereits zur Wartung der pinned_link-Liste verwendet werden, sodass die Buchhaltung nur beim äußersten Pin und dem finalen Unpin aktualisiert wird.

Durch die Zentralisierung dieser Logik in xe_bo_account_pin()/xe_bo_account_unpin() wird zudem eine zweite, verwandte Lücke in der Buchhaltung geschlossen, die importierte dma-bufs betrifft. Für den ttm_tt eines importierten BO gibt xe_ttm_tt_populate() (der TTM-TT-Populate-Hook von Xe) frühzeitig zurück, ohne xe_ttm_tt_account_add() aufzurufen, da TTM_TT_FLAG_EXTERNAL gesetzt ist, aber nicht TTM_TT_FLAG_EXTERNAL_MAPPABLE. Der Wrapper ttm_tt_populate() des TTM-Kerns markiert das TT jedoch bedingungslos als „populated" (belegt/befüllt) bei Erfolg des Driver-Hooks, sodass ttm_tt_is_populated() weiterhin true dafür zurückgibt. xe_bo_account_pin()/xe_bo_account_unpin() vertrauten sich mit ttm_tt_is_populated() als Proxy für „diese Pages sind vom Shrinker gebucht", und würden daher Pages für ein solches TT subtrahieren/hinzufügen, die ursprünglich nie hinzugefügt wurden, was erneut zu einem Underflow der Zählungen des Shrinkers führt. Dies ist heute über xe_bo_pin_external() erreichbar und würde durch den fb-pin-Pfad neu zugänglich werden, sobald dieser Patch __xe_pin_fb_vma() unterhalb von xe_bo_pin_account() leitet. Daher wird dies hier behoben und nicht in einem späteren Patch, um zu vermeiden, dass ein Commit in dieser Reihe die Regression einführt, bevor sie behoben wird. Die Buchhaltung für importierte BOs wird übersprungen, indem derselbe EXTERNAL && !EXTERNAL_MAPPABLE-Test verwendet wird, den xe_ttm_tt_populate()/xe_ttm_tt_unpopulate() zur Entscheidungsfindung nutzen, über einen neuen Hilfsfunktion xe_ttm_bo_is_imported() (aus ihrer einzigen vorherigen Aufrufstelle hochgehoben).

v2: - Behebung des kritischen Problems, das durch die Sashiko AI-Bewertung entdeckt wurde: Die hier eingeführte Pin-Count-Übergangsprüfung wurde weiterhin vom fb-pin-Pfad (__xe_pin_fb_vma()/__xe_unpin_fb_vma()) umgangen, was bei einem echten letzten Unpin durch den fb-unpin zu einem veralteten pinned_link-Eintrag und einem permanenten Shrinker-Buchhaltungs-Leak führen könnte. Dies wird in einem separaten Follow-up-Patch dieser Reihe adressiert und nicht hier eingefaltet, da es sich um einen eigenständigen Bug mit seinem eigenen Fixes-Tag handelt. - Entfernen der unnötigen lokalen Variable „last_unpin" in xe_bo_unpin_external(), wodurch die ursprüngliche Inline-Prüfung bo->ttm.pin_count == 1 wiederhergestellt wird; dies war eine nicht genutzte Umbenennung, die von keiner der neuen Buchhaltungs-Hilfsfunktionen verwendet wurde und ohnehin durch den Follow-up-Patch gelöscht worden wäre.

v3: - Importierte dma-bufs werden von der Pin/Unpin-Shrinker-Buchhaltung ausgeschlossen, wodurch ein weiterer Unterlauf behoben wird, der ebenfalls von Sashiko AI entdeckt wurde. - Hinzufügen eines kurzen Kommentars an der Backup-Object-Pin-Stelle mit dem Hinweis, dass diese zum Zeitpunkt des Pins bereits populated/accounted (belegt/gebucht) ist; dies adressiert (als Klarstellung für einen False-Positive, keine Codeänderung erforderlich) ein separates Bedenken bezüglich eines Medium-Schweregrads-Buchhaltungs-Leaks, das ebenfalls von Sashiko AI entdeckt wurde.

---gekürzt---

Be aware that VulDB is the high quality source for vulnerability data.

Zuständig

Linux

Reservieren

25.09.2026

Veröffentlichung

23.10.2026

Moderieren

akzeptiert

Eintrag

VDB-425918

EPSS

0.00000

KEV

nein

Aktivitäten

very low

Quellen

Want to know what is going to be exploited?

We predict KEV entries!