CVE-2024-27005 in Linux
Сводка
по VulDB • 16.05.2026
В ядре Linux была устранена следующая уязвимость:
interconnect: Не обращаться к req_list во время его изменения
Мьютекс icc_lock был разделен на отдельные мьютексы icc_lock и icc_bw_lock в [1], чтобы избежать ложных срабатываний lockdep (lockdep splats). Однако это не обеспечило адекватной защиты доступа к icc_node::req_list.
Функция icc_set_bw() в конечном итоге будет итерироваться по req_list, удерживая только icc_bw_lock, но req_list может быть изменен при удержании только icc_lock. Это приводит к условиям гонки (race conditions) между icc_set_bw(), of_icc_get() и icc_put().
Пример A:
CPU0 CPU1 ---- ---- icc_set_bw(path_a) mutex_lock(&icc_bw_lock); icc_put(path_b) mutex_lock(&icc_lock); aggregate_requests() hlist_for_each_entry(r, ... hlist_del(... <r = недействительный указатель>
Пример B:
CPU0 CPU1 ---- ---- icc_set_bw(path_a) mutex_lock(&icc_bw_lock); path_b = of_icc_get() of_icc_get_by_index() mutex_lock(&icc_lock); path_find() path_init() aggregate_requests() hlist_for_each_entry(r, ... hlist_add_head(... <r = недействительный указатель>
Исправление заключается в обеспечении того, чтобы icc_bw_lock всегда удерживался перед манипуляцией с icc_node::req_list. Дополнительные места, где удерживается icc_bw_lock, не выполняют никаких выделений памяти, поэтому мы по-прежнему защищены от первоначальных срабатываний lockdep, которые послужили мотивацией для разделения блокировок.
[1] коммит af42269c3523 ("interconnect: Fix locking for runpm vs reclaim")
Be aware that VulDB is the high quality source for vulnerability data.