drm/nouveau/uvmm: fix NULL deref unwinding an OP_MAP_SPARSE op
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 6.6.160, 6.12.110, 6.18.51, 7.2.5
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
Summary
In the Linux kernel, the following vulnerability has been resolved: drm/nouveau/uvmm: fix NULL deref unwinding an OP_MAP_SPARSE op Each bind_job_op is zeroed by kzalloc_obj() in bind_job_op_from_uop(), and the OP_MAP_SPARSE case in nouveau_uvmm_bind_job_submit() only creates a region, so op->ops stays NULL for a successfully processed sparse map. If a later op in the same job fails, the reverse unwind loop revisits that op and calls drm_gpuva_ops_free(&uvmm->base, op->ops) unconditionally. drm_gpuva_ops_free() dereferences its argument right away (list_for_each_entry_safe on &ops->list), so a NULL op->ops oopses. The path is reachable by any render-node fd holder, since NOUVEAU_VM_BIND is DRM_RENDER_ALLOW. Guard the free with IS_ERR_OR_NULL(), as nouveau_uvmm_bind_job_cleanup() already does for the identical free.
Timeline
- CVE published
- Record last updated
Affected versions
- Linux Linux
From b88baab828713ce0b49b185444b2ee83bed373a8 · fixed in d8ec34618e71018fd7a3f73c57c6b92d71a6c7c3; From b88baab828713ce0b49b185444b2ee83bed373a8 · fixed in 3bf493cf7ed0c2b3df728977a257e0d99b4db1c6; From b88baab828713ce0b49b185444b2ee83bed373a8 · fixed in b7dc03e09313d22a6d230b759de3b05d504c008f; From b88baab828713ce0b49b185444b2ee83bed373a8 · fixed in 3857238de6bce6c1573e8cb86c37b067e5208f05; From b88baab828713ce0b49b185444b2ee83bed373a8 · fixed in 412a6ceb56d501ef2f8202e26ab4b5d4dfbca566
- Linux Linux
6.6
- KernelLinux
From 6.6.0 · fixed in 6.6.160; From 6.7.0 · fixed in 6.12.110; From 6.13.0 · fixed in 6.18.51; From 6.19.0 · fixed in 7.2.5