В ядре Linux устранена следующая уязвимость: drm/sched: Исправить тупик в drm_sched_entity_kill_jobs_cb В выпуске Mesa, упомянутом ниже, ук…
В ядре Linux устранена следующая уязвимость: drm/sched: Исправить тупик в drm_sched_entity_kill_jobs_cb В выпуске Mesa, упомянутом ниже, указывалось на возможный тупик: [ 1231.611031] Возможный прерывание небезопасного сценария блокировки: [ 1231.611033] CPU0 CPU1 [ 1231.611034] -------- [ 1231.611035] замок(&xa->xa_lock#17); [ 1231.611038] local_irq_disable(); [ 1231.611039] замок (&fence->блокировка); [ 1231.611041] замок(&xa->xa_lock#17); [ 1231.611044] <ПерВПЕРВ»> [ 1231.611045] замок (&забор->блоко); [ 1231.611047] *** DEADLOCK *** В этом примере CPU0 будет быть любой функцией, доступной к job-fi (зависимость) через xa_* функции, которые не отключают прерывания (например: drm_sched_job_add_add_dependency(), drm_sched_entity_kill_jobs_cb()). CPU1 выполняет drm_sched_entity_kill_jobs_cb() в качестве сигнализации забора обратный звонок в контексте прерывания. Он зайдет в тупик при попытке захватите xa_lock, который уже удерживается CPU0. Замена всего xa_* использования их xa_*_irq аналогами исправит этот вопрос, но Кристиан указал на другой вопрос: dma_fence_signal принимает fence.lock и так же делает dma_fence_add_callback. dma_fence_signal() // замки f1.lock -> drm_sched_entity_kill_jobs_cb() -> для всех зависимостей -> dma_fence_add_callback() // замки f2.lock Это зайдет в тупик, если f1 и f2 разделят один и тот же спин-замок. Чтобы исправить обе проблемы, код итерирует зависимости и перевооружает их Переезжает на drm_sched_entity_kill_jobs_work(). [фаста: совершите сообщение гнид]
| Продукт | Вендор | Статус |
|---|---|---|
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux-6.12 | Отслеживается | |
| linux-allwinner-5.19 | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается | |
| linux-aws | Отслеживается |