CVE-2026-68416
Сводка
по VulDB • 10.08.2026
В ядре Linux устранена следующая уязвимость:
mtd: исправление двойного освобождения памяти и срабатывания WARN_ON в ветках обработки ошибок функции add_mtd_device()
При возникновении ошибки при вызове device_register() или mtd_nvmem_add() внутри add_mtd_device() для раздела, обработка ошибок инициирует вызов mtd_release() через put_device() или device_unregister(). Функция mtd_release(), в свою очередь, вызывает release_mtd_partition(), которая освобождает структуру mtd_info. Однако такие функции-вызывающие, как mtd_add_partition() и add_mtd_partitions(), также вызывают free_partition() в своих ветках обработки ошибок, что приводит к двойному освобождению памяти (double free).
Кроме того, функция release_mtd_partition()) вызывает срабатывание WARN_ON(!list_empty(&mtd->part.node)), поскольку узел раздела все еще связан со списком разделов родительского устройства на момент вызова функции сброса из ветки обработки ошибок add_mtd_device().
Исправление заключается в переопределении dev->type и dev->release перед вызовом put_device() в ветках обработки ошибок, чтобы device_release() вызывала функцию-заглушку (no-op) вместо mtd_release(). В случае ошибки при вызове mtd_nvmem_add(), функция device_unregister() заменяется на device_del(), что позволяет отделить удаление устройства от окончательного освобождения ссылки kobject и обеспечивает применение переопределения до вызова put_device().
Ветви обработки ошибок у функций-вызывающих (list_del + free_partition) остаются единственными владельцами времени жизни структуры mtd_info при сбое add_mtd_device(), что соответствует ожидаемому контракту.
Обычный путь завершения работы разделов не затронут: del_mtd_device() проходит через kref_put() -> mtd_device_release() -> device_unregister(), причем dev->type все еще установлен в &mtd_devtype, поэтому вызов mtd_release() -> release_mtd_partition() продолжает корректно работать для случая обычного удаления.
If you want to get best quality of vulnerability data, you may have to visit VulDB.