Подробности

[В начало]

Проблема в реализации № K0001

Краткое описание

(ext4) Разыменование NULL при использовании sb->s_fs_info после неудачной попытки монтирования

Подробное описание

При попытке монитирования loop device, ассоциированного с файлом, содержавшим файловую систему ext4 след. вызов kmalloc() вернул NULL (fs/ext4/mballoc.c:2437):

    i = (sb->s_blocksize_bits + 2) * sizeof(*sbi->s_mb_maxs);
    sbi->s_mb_maxs = kmalloc(i, GFP_KERNEL);

ext4_mb_init() вернула в результате -ENOMEM, как и должно было быть. При этом в конце работы функции ext4_fill_super() поле s_fs_info field соотв. структуры struct super_block было установлено в NULL (fs/ext4/super.c:3686):

out_fail:
    sb->s_fs_info = NULL;

Однако после этого в функции ext4_sync_fs() была попытка обращения к памяти по указателю sb->s_fs_info (fs/ext4/super.c:4123):

    struct ext4_sb_info *sbi = EXT4_SB(sb);
    ...
    flush_workqueue(sbi->dio_unwritten_wq);

В последнем операторе 'sbi' равен NULL в данном случае.

Компонент

linux-kernel 2.6.37

Ссылки

Problems found by KEDR

Принято

Kernel Bug Tracker, bug #26752

Статус

Исправлено в ядре 2.6.39-rc1

[В начало]