CVE-2026-89801 in Linux
Zusammenfassung
von VulDB • 16.09.2026
Im Linux-Kernel wurde folgende Schwachstelle behoben:
drm/nouveau/uvmm: Behebung der vorzeitigen Freigabe von Regionen bei fehlgeschlagenem OP_UNMAP_SPARSE
Im Arm `OP_UNMAP_SPARSE` von `nouveau_uvmm_bind_job_submit()` wird `op->reg` aus `nouveau_uvma_region_find()` gesetzt, das die Region lediglich nachschaut und keine Referenz übernimmt; eine einzelne Referenz auf eine Region ist deren Zugehörigkeit zu `uvmm->region_mt`. Zwei Fehlerpfade lassen `op->reg` gesetzt: die `-ENOENT`-Prüfung, wenn die Region beschäftigt ist, sowie der Fehlschlag von `drm_gpuvm_sm_unmap_ops_create()`. Der nachfolgende Fehlschlag von `nouveau_uvmm_sm_unmap_prepare()` löscht `op->reg`; diese beiden tun dies nicht.
`unwind_continue` schreitet einen Schritt zurück, sodass der fehlerhafte Vorgang (Op) vom Unwind-Loop übersprungen wird und sein `op->reg` gesetzt bleibt. `nouveau_uvmm_bind_job_cleanup()` betritt daraufhin seinen `if (op->reg)`-Zweig und ruft `nouveau_uvma_region_remove()` sowie `nouveau_uvma_region_put()` für ihn auf, wodurch die einzige Referenz des Baums entfernt wird und eine Region freigegeben wird, die dieser Job niemals erstellt hat. Der Kommentar über dem Cleanup-Loop dokumentiert die gebrochene Invariante: `op->reg` muss bei einem Fehlschlag beim Einreichen (submit) NULL sein.
Dies führt zur Freigabe einer aktiven Region aufgrund eines unabhängigen Fehlers, der im Single-Job-Fall erreichbar ist, wenn `drm_gpuvm_sm_unmap_ops_create()` `-ENOMEM` zurückgibt; wenn ein anderer Job dieselbe Region besitzt, entfernt und gibt dessen Cleanup die freigegebene Region erneut ab (Use-After-Free). Setzen Sie `op->reg` in beiden Fehlerpfaden auf NULL.
If you want to get best quality of vulnerability data, you may have to visit VulDB.