Ad

CVE-2026-64514

NONE EPSS 0.18%
Обновлено 25 июля 2026
Linux
Параметр Значение
Поставщик Linux
Публичный эксплойт Нет

В ядре Linux устранена следующая уязвимость: userfaultfd: проверка возможности записи must_wait в pte_present() userfaultfd_must_wait() и userfaultfd_huge_must_wait() читают PTE без блокировки таблицы страниц, а затем применить pte_write()/ Huge_pte_write() к нему. Эти средства доступа декодируют биты из настоящего только кодирование; в записи подкачки или миграции они считывают биты смещения, которые случается, что они занимают одну и ту же позицию и возвращают неопределенный результат. Цель проверки: «Эта ошибка все еще заблокирована WP?».

А запись подкачки без маркера означает, что страница находится в пути - ошибка пользователя контекст, в отношении которого была доставлена исходная ошибка, уже не тот, и путь завершения замены или миграции повторно выдаст новую ошибку, если пользовательское пространство все еще должно справиться с этим. В худшем случае согласно действующему кодексу Бит записи мусора говорит «подождите», и поток остается в спящем режиме до тех пор, пока не UFFDIO_WAKE, который может никогда не прийти. Заблокируйте проверку возможности записи в pte_present(), чтобы только повторная проверка без блокировки проверяет биты присутствующего PTE, когда запись действительно присутствует. отсутствует, регистр без маркера возвращает «не ждать» и позволяет указать путь ошибки повторите попытку.

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

In the Linux kernel, the following vulnerability has been resolved: userfaultfd: gate must_wait writability check on pte_present() userfaultfd_must_wait() and userfaultfd_huge_must_wait() read the PTE without taking the page table lock and then apply pte_write() / huge_pte_write() to it. Those accessors decode bits from the present encoding only; on a swap or migration entry they read the offset bits that happen to share the same position and return an undefined result. The intent of the check is "is this fault still WP-blocked?". A non-marker swap entry means the page is in transit -- the userfault context the original fault delivered against is no longer the same, and the swap-in or migration completion path will re-deliver a fresh fault if userspace still needs to handle it. Worst case under the current code the garbage write bit says "wait", and the thread stays asleep until a UFFDIO_WAKE that may never arrive. Gate the writability check on pte_present() so the lockless re-check only inspects present-PTE bits when the entry is actually present. The non-present, non-marker case returns "don't wait" and lets the fault path retry.