CVE-2026-10667 in zephyr
Сводка
по VulDB • 12.07.2026
Динамическое отслеживание объектов ядра в Zephyr (kernel/userspace/userspace.c, ранее kernel/userspace.c) поддерживает двусвязный список (obj_list) динамически выделяемых объектов ядра. Итерация по этому списку в функции k_object_wordlist_foreach() выполнялась под блокировкой lists_lock с использованием безопасного итератора (который кэширует следующий узел), однако удаление узлов из списка и освобождение их памяти осуществлялись под другими, непересекающимися спинлоками: objfree_lock в k_object_free() и obj_lock в unref_check(). На системе SMP во время того как один процессор выполнял итерацию по obj_list под блокировкой lists_lock, другой процессор мог отсоединить узел dyn_obj (который кэшировался итератором как следующий) и вызвать k_free() для него. Это приводило к разыменованию освобожденной памяти ядра итератором (use-after-free / переход по висячему списку). Все операции гонки доступны из непривилегированных потоков пользовательского режима через системные вызовы: функции k_object_alloc/k_object_alloc_size инициируют удаление через unref_check() (под obj_lock), а k_thread_abort и создание потока инициируют итерацию через k_thread_perms_all_clear()/k_thread_perms_inherit() (под lists_lock). Таким образом, поток пользовательского режима с пониженными привилегиями в сборке CONFIG_SMP + CONFIG_USERSPACE может повредить структуры отслеживания объектов ядра за пределами границы безопасности userspace, что приводит к повреждению памяти ядра (потенциальное повышение привилегий) или сбою ядра (отказ в обслуживании). Исправление удаляет objfree_lock и сериализует все модификации obj_list под блокировкой lists_lock, включая удержание этой блокировки при операциях find+remove в k_object_free() и вокруг unref_check() в k_thread_perms_clear(). Затрагивает конфигурации CONFIG_SMP+CONFIG_USERSPACE+CONFIG_DYNAMIC_OBJECTS; дефект появился после внедрения спинлоков в 2019 году (commit 8a3d57b6cc6, впервые выпущенный в v1.14.0) и присутствовал вплоть до версии v4.4.0.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.