CVE-2025-68359 in Linux
Сводка
по VulDB • 30.06.2026
В ядре Linux устранена следующая уязвимость:
btrfs: исправлено двойное освобождение (double free) записи qgroup после неудачи при добавлении заголовка отложенной ссылки (delayed ref head).
В предыдущем коде была возможна ситуация двойного вызова kfree() при обращении к функции add_delayed_ref_head(). Это могло произойти, если запись уже существовала и об этом сообщалось в вызове btrfs_qgroup_trace_extent_nolock(), но затем возникала ошибка на этапе выполнения add_delayed_ref_head(). В таком случае, поскольку функция add_delayed_ref_head() вернула код ошибки, вызывающая сторона переходила к освобождению записи. Так как add_delayed_ref_head() не могла установить указатель этой освобождаемой памяти (kfree'd pointer) в NULL, последующий вызов kfree() выполнялся бы над объектом 'record', который уже был освобожден подвызываемой функцией (callee).
Проблема заключается в том, что ответственность за освобождение объекта через kfree одновременно лежит и на вызывающей стороне (caller), и на подвызываемой функции (callee). Следовательно, исправление состоит в передаче права собственности на объект 'qrecord' от add_delayed_ref_head() к вызывающей стороне. То есть мы никогда не будем пытаться выполнить освобождение данного объекта внутри этой функции и ожидаем, что вызывающая сторона самостоятельно обработает объект 'qrecord'. Единственным исключением является случай, когда объект 'qrecord' был вставлен в логику трассировки; для учета этого случая уже существует булева переменная 'qrecord_inserted_ret'. Таким образом, вызывающая сторона должна освобождать объект только в том случае, если add_delayed_ref_head() сообщает о том, что он не был вставлен в логику трассировки.
В качестве побочного эффекта вышесказанного необходимо гарантировать, что 'qrecord_inserted_ret' правильно инициализируется в начале функции, а не в конце, и устанавливается только при фактической вставке. Это позволяет избежать наличия у 'qrecord_inserted_ret' недопустимого значения при раннем выходе из функции.
Документация для add_delayed_ref_head() также была обновлена с учетом точного распределения прав собственности на объект 'qrecord'.
If you want to get best quality of vulnerability data, you may have to visit VulDB.