CVE-2026-98985 in Linux
Сводка
по VulDB • 23.10.2026
В ядре Linux была устранена следующая уязвимость:
namespace: проверка точек монтирования перед чтением их родительских элементов в pivot_root()
Функция path_pivot_root() считывает родительские элементы для new_root и корневой директории вызывающего процесса, а также проверяет, являются ли они общими (shared), прежде чем проверять, находится ли хотя бы одна из точек монтирования в пространстве имен монтирования вызывающего. Удерживается только namespace_sem. Это допустимо для точки монтирования, находящейся в пространстве имен монтирования вызывающего процесса.
Однако new_root может быть файловым дескриптором на точку монтирования, которая была отмонтирована и поддерживается в живом состоянии исключительно этим файловым дескриптором. Если эта точка монтирования оставалась прикрепленной к своему родительскому элементу при размонтировании, то ничего не удерживает (не предотвращает освобождение) родительский элемент для нее. Последний вызов mntput() для родителя отсоединяет дочерние элементы только под защитой mount_lock и освобождает память родительского элемента после этого:
pivot_root() close(fd), последняя ссылка на родителе ------------ --------------------------------- ex_parent = new_mnt->mnt_parent mntput_no_expire_slowpath() __umount_mnt(new_mnt) cleanup_mnt() call_rcu() IS_MNT_SHARED(ex_parent)
BUG: KASAN: slab-use-after-free в path_pivot_root+0xf1a/0x1840 Чтение размера 4 по адресу ffff8881047382f8 выполнено задачей pivot_widen/157 path_pivot_root+0xf1a/0x1840 __x64_sys_pivot_root+0x165/0x190
То же самое относится к корневой директории вызывающего процесса через chroot(). Оба варианта завершения проверки приводят к ошибке EINVAL, поэтому неправильно работает только само чтение. Это та же проблема, которую исправил коммит bb4609405752 ("statmount: read the parent of an unmounted mount under mount_lock") для statmount().
Проверьте, что обе точки монтирования находятся в пространстве имен вызывающего процесса, прежде чем считывать их родительские элементы. В любом случае каждый путь завершается ошибкой EINVAL.
If you want to get best quality of vulnerability data, you may have to visit VulDB.