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.

Источники

Interested in the pricing of exploits?

See the underground prices here!