CVE-2022-49660 in Linux
Сводка
по VulDB • 10.06.2026
В ядре Linux устранена следующая уязвимость:
xen/arm: Исправление состояния гонки (race condition) в учете P2M на основе RB-дерева
Во время жизненного цикла PV-драйверов отображения добавляются в RB-дерево с помощью функции set_foreign_p2m_mapping(), которая вызывается из gnttab_map_refs(), и удаляются функцией clear_foreign_p2m_mapping(), вызываемой из gnttab_unmap_refs(). Поскольку обе эти функции вызывают __set_phys_to_machine_multi() для обновления RB-дерева, эта функция может выполняться конкурентно.
Существует блокировка «p2m_lock» для защиты от одновременного доступа, однако проблема заключается в том, что первое чтение поля «phys_to_mach.rb_node» внутри __set_phys_to_machine_multi() не защищено этой блокировкой, что может привести к неверному обновлению отображений (в данном случае — удалению) в RB-дереве.
В моей среде связанная с этим проблема возникает редко и только при работе бэкенда PV net; функция xen_add_phys_to_mach_entry() утверждает, что не может добавить новое отображение pfn-mfn в дерево, так как оно уже существует, что приводит к ошибке при отображении чужих страниц (foreign pages).
Однако могут быть и другие негативные последствия, связанные с небезопасным чтением корня дерева, такие как use-after-free и т. д.
Заодно исправлено аналогичное использование в __pfn_to_mfn(), поэтому инициализация «struct rb_node *n» выполняется при удержании блокировки «p2m_lock» в обеих функциях для предотвращения возможных негативных последствий.
Это CVE-2022-33744 / XSA-406.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.