Ad

CVE-2026-68266

HIGH CVSS 3.1: 7,8 EPSS 0.13%
Обновлено 17 августа 2026
Linux
Параметр Значение
CVSS 7,8 (HIGH)
Поставщик Linux
Публичный эксплойт Нет

В ядре Linux устранена следующая уязвимость: drm/xe: хранить ссылку dma-buf для импортированных BO. Импортированный BO dma-buf создается как BO ttm_bo_type_sg, Объект резервирования — это dma_buf->resv экспортера. Импортер, однако ссылка на dma-buf принимается только после успешного завершения dma_buf_dynamic_attach().

До тех пор ничто не поддерживает экспортера в живых, поэтому, если экспортер освобожден, в то время как BO все еще ссылается на свой ресурс, последующий доступ к этому resv - это использование после освобождения: Упс: общая ошибка защиты, возможно, для неканонического адреса. 0x6b6b6b6b6b6b6b9c Рабочая очередь: ttm ttm_bo_delayed_delete [ttm] RIP: 0010:mutex_can_spin_on_owner+0x3f/0xc0 Достичь этого можно двумя путями: - dma_buf_dynamic_attach() не работает, или - ttm_bo_init_reserved() завершается сбоем во время создания BO. В обоих случаях у BO уже есть bo->base.resv, указывающий на экспортера. resv и sg BO всегда удаляются с помощью ttm_bo_delayed_delete(), который блокирует bo->base.resv асинхронно — возможно, после того, как экспортер был освобожден. Возьмите ссылку dma-buf в xe_bo_init_locked(), прежде чем ttm_bo_init_reserved(), поэтому здесь также учитывается ошибка создания, и освободите его в xe_ttm_bo_destroy().

Ссылка сохраняется на весь срок Срок службы BO, сохранение общего ресурса на каждом пути. версия 2: - Переработано исправление, позволяющее избежать создания импортированного sg BO раньше. dma_buf_dynamic_attach() завершается успешно. - Присоедините с помощью importer_priv == NULL и игнорируйте validate_mappings. неполный импорт. версия 3: - Отменен подход к переупорядочению на стороне xe, поскольку importer_priv должен быть действителен, когда dma_buf_dynamic_attach() публикует вложение. - По предложению Кристиана в теме v1, включил галочку. import_attach вместо полного удаления защиты sg. - Исправляет xe и amdgpu в одном патче TTM. версия 4: - Перемещена проверка import_attach после dma_resv_copy_fences(), чтобы ограничить копируются перед возвратом для успешного импорта (Томас). — Из сообщения о фиксации удалено утверждение «активен экспортер» (Томас). v5: - Добавлен патч drm/xe, чтобы импортированные sg BO не подключались к LRU перед подключением. добивается успеха; одного исправления TTM недостаточно для xe, если BO уже LRU-виден. (Томас) патч v4: https://patchwork.freedesktop.org/patch/736663/?series=169129&rev=2 - Патч 1 (drm/ttm) содержит обзор Christian's Review-by из версии 4. v6: - Переработано исправление по предложению Томаса. Вместо ТТМ resv индивидуализация (v1-v5) плюс обработка xe off-LRU/размещения (v5), просто сохраните ссылку dma-buf для времени жизни импортированного BO, чтобы общий ресурс никогда не может быть освобожден, пока BO все еще ссылается на него. Один патч xe, без изменения TTM. (Томас) — Возьмите ссылку в xe_bo_init_locked() перед ttm_bo_init_reserved(). поэтому ошибка создания TTM также рассматривается (Томас). - Убрана серия v5 (drm/ttm + drm/xe off-LRU); подход вне LRU также регрессировал в CI BAT через ttm_bo_pipeline_gutting(), создав призрака БО, пережившее экспортера.

Ссылка на v5: https://patchwork.freedesktop.org/series/169984/ v7: — Переместите журнал изменений выше, чтобы он оставался в сообщении о фиксации. - Изменение порядка записей журнала изменений от старых к новейшим. (Томас) (вишня выбрана из коммита 3516f3fae6be35642f8f06f8a218da6425c0306a)

Показать оригинальное описание (EN)

In the Linux kernel, the following vulnerability has been resolved: drm/xe: Hold a dma-buf reference for imported BOs An imported dma-buf BO is created as a ttm_bo_type_sg BO whose reservation object is the exporter's dma_buf->resv. The importer, however, only takes a dma-buf reference after a successful dma_buf_dynamic_attach(). Until then nothing keeps the exporter alive, so if the exporter is freed while the BO still references its resv, a later access to that resv is a use-after-free: Oops: general protection fault, probably for non-canonical address 0x6b6b6b6b6b6b6b9c Workqueue: ttm ttm_bo_delayed_delete [ttm] RIP: 0010:mutex_can_spin_on_owner+0x3f/0xc0 This can be reached on two paths: - dma_buf_dynamic_attach() fails, or - ttm_bo_init_reserved() fails during BO creation. In both cases the BO already has bo->base.resv pointing at the exporter resv, and sg BOs are always torn down via ttm_bo_delayed_delete(), which locks bo->base.resv asynchronously - potentially after the exporter has been freed. Take the dma-buf reference in xe_bo_init_locked(), before ttm_bo_init_reserved(), so it also covers a creation failure there, and release it in xe_ttm_bo_destroy(). The reference is held for the whole BO lifetime, keeping the shared resv alive on every path. v2: - Reworked the fix to avoid creating the imported sg BO before dma_buf_dynamic_attach() succeeds. - Attach with importer_priv == NULL and make invalidate_mappings ignore incomplete imports. v3: - Dropped the xe-side reordering approach since importer_priv must be valid when dma_buf_dynamic_attach() publishes the attachment. - Per Christian's suggestion on the v1 thread, keyed the check on import_attach rather than removing the sg guard entirely. - Fixes both xe and amdgpu in a single TTM patch. v4: - Moved import_attach check to after dma_resv_copy_fences() so fences are copied before returning for successful imports (Thomas). - Removed exporter-alive claim from commit message (Thomas). v5: - Add drm/xe patch to keep imported sg BOs off the LRU before attach succeeds; the TTM fix alone is not sufficient for xe if the BO is already LRU-visible. (Thomas) v4 patch: https://patchwork.freedesktop.org/patch/736663/?series=169129&rev=2 - Patch 1 (drm/ttm) carries Christian's Reviewed-by from v4. v6: - Reworked the fix based on Thomas' suggestion. Instead of the TTM resv individualization (v1-v5) plus the xe off-LRU/placement handling (v5), just hold a dma-buf reference for the imported BO lifetime so the shared resv can never be freed while the BO still references it. Single xe patch, no TTM change. (Thomas) - Take the reference in xe_bo_init_locked() before ttm_bo_init_reserved() so a TTM creation failure is covered too (Thomas). - Dropped the v5 series (drm/ttm + drm/xe off-LRU); the off-LRU approach also regressed in CI BAT via ttm_bo_pipeline_gutting() creating a ghost BO that outlived the exporter. Link to v5: https://patchwork.freedesktop.org/series/169984/ v7: - Move changelog above --- so it stays in the commit message. - Reorder changelog entries oldest-to-newest. (Thomas) (cherry picked from commit 3516f3fae6be35642f8f06f8a218da6425c0306a)

Характеристики атаки

Способ атаки
Локальный
Нужен локальный доступ
Сложность
Низкая
Легко эксплуатировать
Нужны права
Низкие
Нужны базовые права
Участие пользователя
Не требуется
Не нужно действие пользователя

Последствия

Конфиденциальность
Высокое
Полная утечка данных
Целостность
Высокое
Полная модификация данных
Доступность
Высокое
Полный отказ в обслуживании

Строка CVSS v3.1