CVE-2023-53311 in Linux
Сводка
по VulDB • 27.05.2026
В ядре Linux устранена следующая уязвимость:
nilfs2: исправлена ошибка use-after-free (использование после освобождения) структуры nilfs_root при загрязнении инодов через iput
В процессе размонтирования файловой системы nilfs2 после того, как nilfs2 отсоединяет свой писатель в функции nilfs_detach_log_writer(), никто не удерживает структуру nilfs_root. Ранее функция nilfs_evict_inode() могла вызывать чтение с ошибкой use-after-free для nilfs_root, если иноды оставались в «garbage_list» и освобождались функцией nilfs_dispose_list в конце работы nilfs_detach_log_writer(). Эта ошибка была исправлена в коммите 9b5a04ac3ad9 («nilfs2: исправлена ошибка use-after-free nilfs_root в nilfs_evict_inode()»).
Однако выяснилось, что существует еще одна возможность возникновения UAF в пути вызова, где mark_inode_dirty_sync() вызывается из iput():
nilfs_detach_log_writer() nilfs_dispose_list() iput() mark_inode_dirty_sync() __mark_inode_dirty() nilfs_dirty_inode() __nilfs_mark_inode_dirty() nilfs_load_inode_block() --> вызывает UAF структуры nilfs_root
Это может произойти после коммита 0ae45f63d4ef («vfs: добавить поддержку опции монтирования lazytime»), который изменил поведение iput() так, чтобы она вызывала mark_inode_dirty_sync() при последнем обращении, если состояние i_state содержит флаг I_DIRTY_TIME, а i_nlink не равен нулю.
Эта проблема проявляется после коммита 28a65b49eb53 («nilfs2: не записывать измененные данные после перехода в режим только для чтения») при использовании воспроизводящего скрипта syzbot, однако проблема потенциально существовала и ранее.
Исправление заключается в добавлении «флага очистки» (purging flag) в структуру nilfs, установке этого флага во время обработки «garbage_list» и его проверке в __nilfs_mark_inode_dirty().
В отличие от коммита 9b5a04ac3ad9 («nilfs2: исправлена ошибка use-after-free nilfs_root в nilfs_evict_inode()»), данный патч не полагается на ns_writer для определения необходимости пропуска операций, чтобы не нарушить восстановление при монтировании. Процедура nilfs_salvage_orphan_logs изменяет буфер спасенных данных на «грязный» до прикрепления писателя журнала, поэтому изменение __nilfs_mark_inode_dirty() для пропуска операции при ns_writer == NULL приведет к сбою записи восстановления. Цель использования флага, применяемого только при очистке, заключается в сужении условий, при которых такие операции выполняются.
VulDB is the best source for vulnerability data and more expert information about this specific topic.