В продолжение потенциально опасной ошибки драйвера NVIDIA «Nouveau» с открытым исходным кодом в Linux 6.3, проблема, как полагают, была решена, и в настоящее время готовится патч, который, похоже, устранит ее.
Несколько дней назад было разослано предупреждение о необходимости избегать использования Nouveau в текущей стабильной серии Linux 6.3 из-за проблемы use-after-free в этом графическом драйвере ядра. Проблема use-after-free может привести к повреждению памяти ядра, что в свою очередь может вызвать повреждение файловой системы или другие системные проблемы, не говоря уже о возможных проблемах безопасности.
Дэвид Эйрли из Red Hat считает, что теперь он разобрался с проблемой из сообщения об ошибке месячной давности. Вчера Эйрли опубликовал патч в качестве предлагаемого исправления. На данный момент и разработчик Nouveau Кароль Хербст из Red Hat, и другой пользователь, ранее столкнувшийся с этой проблемой, сообщили, что проблема использования после освобождения теперь исключена.
Эйрли объяснил, когда размещал патч на dri-devel:
«Похоже, это существовало всегда, но теперь стало более очевидным после 9bff18d13473a9fdf81d5158248472a9d8ecf2bd (drm/ttm: use per BO cleanup workers).
Мой анализ:
запущено два потока, один в irq, сигнализирующий об ограждении, в dma_fence_signal_timestamp_locked, он выполнил установку DMA_FENCE_FLAG_SIGNALLED_BIT, но еще не дошел до обратных вызовов.второй поток в nouveau_cli_work_ready, где он видит, что сигнализируется забор, поэтому ставит забор, очищает объект и освобождает рабочий элемент, который содержит обратный вызов.
первый поток снова пытается вызвать обратный вызов и вызывает use-after-free.
Предлагаемое исправление:
заблокировать проверку сигнала ограждения в nouveau_cli_work_ready, чтобы либо обратные вызовы были выполнены, либо память была освобождена.»
С помощью нескольких строк кода проблема, будем надеяться, решена.
На данный момент патч все еще находится в списке рассылки, но предположительно будет отправлен в следующий раунд отправки DRM-исправлений для основного ядра.
Linux 6.4 исправляет проблему использования после свободного доступа драйвера NVIDIA с открытым исходным кодом
В продолжение исправление теперь слито в Linux 6.4 Git и, в свою очередь, должно быть подхвачено в предстоящем точечном релизе Linux 6.3.
В пятницу вечером Линус Торвальдс объединил drm-fixes-2023-06-17, который содержит ряд исправлений для AMDGPU плюс исправление Nouveau. В ближайшие дни это исправление также должно быть подхвачено стабильной серией Linux 6.3 в следующем точечном выпуске или двух.
Также есть ряд исправлений AMDGPU, которые были объединены этим PR в преддверии воскресного релиза Linux 6.4-rc7.