Ad

CVE-2026-72472

CRITICAL CVSS 3.1: 9,8 EPSS 0.64%
Обновлено 17 августа 2026
Nfs
Параметр Значение
CVSS 9,8 (CRITICAL)
Уязвимые версии 4.0 — 7.2-rc1
Устранено в версии 6.12.97
Поставщик Nfs
Публичный эксплойт Нет

В ядре Linux устранена следующая уязвимость: nfs: используйте nfsi->rwsem для защиты обхода списка блокировки файлов. Линфэн обнаружил ошибку и предложил два решения, но оба появляются иметь проблемы. Как правило, мы не можем освободить flc_lock во время итерации по блокировке файла. list, чтобы избежать проблем с использованием после освобождения (UAF) при блокировке файлов.

Однако, такие функции, как nfs_delegation_claim_locks и nfs4_reclaim_locks, не могут придерживайтесь этого правила, потому что Recovery_lock или nfs4_lock_delegation_recall может занять много времени. Чтобы решить эту проблему, NFS переключается на использование nfsi->rwsem. для той же защиты, и nfs_reclaim_locks следует этому подходу. Хотя nfs_delegation_claim_locks вместо этого использует so_delegreturn_mutex, этого недостаточно, поскольку один индексный дескриптор может иметь несколько nfs4_state экземпляры.

Таким образом, исправлением является использование nfsi->rwsem в этом случае. Кроме того, после фиксации c69899a17ca4 («NFSv4: обновление диапазона байтов VFS блокировка должна быть атомарной с обновлением stateid"), функции nfs4_locku_done и nfs4_lock_done также нарушают это правило, поскольку они вызовите locks_lock_inode_wait, не удерживая nfsi->rwsem. Просто добавив эта защита может вызвать множество взаимоблокировок, поэтому вместо этого вызов locks_lock_inode_wait перемещен в _nfs4_proc_setlk.

По поводу ошибки исправлено коммитом c69899a17ca4 («NFSv4: обновление диапазона байтов VFS блокировка должна быть атомарной с обновлением stateid"), проблема решена после фиксации 0460253913e5 («NFSv4: nfs4_do_open() неправильно запускается восстановление состояния"), поскольку все слоты опустошаются перед вызовом nfs4_do_reclaim, который предотвращает одновременные изменения идентификатора состояния по этому пути. Кроме того, nfs_delegation_claim_locks также не вызывает этого параллелизма. поскольку при вызове _nfs4_proc_setlk с NFS_DELEGATED_STATE RPC не выполняется. отправлено, поэтому nfs4_lock_done не вызывается. Следовательно, nfs4_lock_delegation_recall из nfs_delegation_claim_locks — первый время установки stateid.

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

In the Linux kernel, the following vulnerability has been resolved: nfs: use nfsi->rwsem to protect traversal of the file lock list Lingfeng identified a bug and suggested two solutions, but both appear to have issues. Generally, we cannot release flc_lock while iterating over the file lock list to avoid use-after-free (UAF) problems with file locks. However, functions like nfs_delegation_claim_locks and nfs4_reclaim_locks cannot adhere to this rule because recover_lock or nfs4_lock_delegation_recall may take a long time. To resolve this, NFS switches to using nfsi->rwsem for the same protection, and nfs_reclaim_locks follows this approach. Although nfs_delegation_claim_locks uses so_delegreturn_mutex instead, this is inadequate since a single inode can have multiple nfs4_state instances. Therefore, the fix is to also use nfsi->rwsem in this case. Furthermore, after commit c69899a17ca4 ("NFSv4: Update of VFS byte range lock must be atomic with the stateid update"), the functions nfs4_locku_done and nfs4_lock_done also break this rule because they call locks_lock_inode_wait without holding nfsi->rwsem. Simply adding this protection could cause many deadlocks, so instead, the call to locks_lock_inode_wait is moved into _nfs4_proc_setlk. Regarding the bug fixed by commit c69899a17ca4 ("NFSv4: Update of VFS byte range lock must be atomic with the stateid update"), it has been resolved after commit 0460253913e5 ("NFSv4: nfs4_do_open() is incorrectly triggering state recovery") because all slots are drained before calling nfs4_do_reclaim, which prevents concurrent stateid changes along this path. Also, nfs_delegation_claim_locks does not cause this concurrency either since when _nfs4_proc_setlk is called with NFS_DELEGATED_STATE, no RPC is sent, so nfs4_lock_done is not called. Therefore, nfs4_lock_delegation_recall from nfs_delegation_claim_locks is the first time the stateid is set.

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

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

Последствия

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

Строка CVSS v3.1

Уязвимые продукты 4

Конфигурация От (включительно) До (исключительно)
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
4.0 6.12.97
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
4.0 6.18.40
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
4.0 7.1.5
Linux Linux_Kernel
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
4.0 7.2-rc1