В ядре Linux устранена следующая уязвимость:
ipmi: исправлено использование после освобождения cmd_rcvr в _ipmi_destroy_user(). Зафиксируйте 9e91f8a6c868 ("ipmi:msghandler: Удалить srcu для
ipmi_interfaces list") удалил синхронизацию_rcu() между отсоединением
получатели команд из intf->cmd_rcvrs и их освобождение, обновление
только комментарий, объясняющий, зачем нужен барьер. Список cmd_rcvrs по-прежнему просматривается под обычным RCU: find_cmd_rcvr()
пропускает его внутрь rcu_read_lock(), а handle_ipmb_get_msg_cmd() заимствует
rcvr->user из этого поиска в том же разделе на стороне чтения.
Без
льготного периода, _ipmi_destroy_user() может освободить() cmd_rcvr, пока
Reader по-прежнему удерживает на него указатель, вызывая использование после освобождения. Переработка только сделала srcu ненужным в списке интерфейсов; тот
Список cmd_rcvrs по-прежнему основан на простом RCU. Восстановите синхронизацию_rcu().
прежде чем освободить приемники.
Показать оригинальное описание (EN)
In the Linux kernel, the following vulnerability has been resolved: ipmi: Fix use-after-free of cmd_rcvr in _ipmi_destroy_user() Commit 9e91f8a6c868 ("ipmi:msghandler: Remove srcu for the ipmi_interfaces list") dropped the synchronize_rcu() between unlinking the command receivers from intf->cmd_rcvrs and freeing them, updating only the comment that explains why the barrier is needed. The cmd_rcvrs list is still traversed under plain RCU: find_cmd_rcvr() walks it inside rcu_read_lock(), and handle_ipmb_get_msg_cmd() borrows rcvr->user from that lookup within the same read-side section. Without the grace period, _ipmi_destroy_user() can kfree() a cmd_rcvr while a reader still holds a pointer to it, causing a use-after-free. The rework only made srcu unnecessary for the interfaces list; the cmd_rcvrs list still relies on plain RCU. Restore the synchronize_rcu() before freeing the receivers.
Характеристики атаки
Последствия
Строка CVSS v3.1