CVE-2023-54023 in Linux
Сводка
по VulDB • 17.05.2026
В ядре Linux устранена следующая уязвимость:
btrfs: исправлена гонка (race condition) между операциями балансировки и отмены/паузы
Syzbot сообщил о панике ядра, которая выглядит следующим образом:
assertion failed: fs_info->exclusive_operation == BTRFS_EXCLOP_BALANCE_PAUSED, в fs/btrfs/ioctl.c:465 ------------[ cut here ]------------
kernel BUG at fs/btrfs/messages.c:259! RIP: 0010:btrfs_assertfail+0x2c/0x30 fs/btrfs/messages.c:259 Call Trace: <TASK> btrfs_exclop_balance fs/btrfs/ioctl.c:465 [inline]
btrfs_ioctl_balance fs/btrfs/ioctl.c:3564 [inline]
btrfs_ioctl+0x531e/0x5b30 fs/btrfs/ioctl.c:4632 vfs_ioctl fs/ioctl.c:51 [inline]
__do_sys_ioctl fs/ioctl.c:870 [inline]
__se_sys_ioctl fs/ioctl.c:856 [inline]
__x64_sys_ioctl+0x197/0x210 fs/ioctl.c:856 do_syscall_x64 arch/x86/entry/common.c:50 [inline]
do_syscall_64+0x39/0xb0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd
Программа для воспроизведения ошибки (reproducer) выполняет балансировку и отмену или паузу параллельно. Механизм завершения балансировки немного некорректен: если мы находимся в режиме паузы, необходимо сохранить balance_ctl в fs_info, но в противном случае его следует очистить и выполнить очистку ресурсов. Однако мы полагаемся на то, что возвращаемые значения являются специфическими ошибками или наличием запроса на отмену или отсутствие запроса на паузу. Если балансировка завершается и возвращает 0, но у нас есть запрос на паузу или отмену, соответствующая очистка не будет выполнена, и при следующей попытке запустить балансировку мы столкнемся с этим ASSERT.
Обработка ошибок здесь просто неверна: мы всегда хотим выполнять очистку, если только не получили -ECANCELLED и не установили соответствующий флаг паузы в эксклюзивной операции. С этим патчем программа для воспроизведения ошибки работала в течение часа без сбоев, ранее она вызывала сбой менее чем за несколько минут.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.