• Ryusuke Konishi's avatar
    nilfs2: fix kernel oops in error case of nilfs_ioctl_move_blocks · 5399dd1f
    Ryusuke Konishi authored
    This fixes a kernel oops reported by Markus Trippelsdorf in the email
    titled "[NILFS users] kernel Oops while running nilfs_cleanerd".
    
    The oops was caused by a bug of error path in
    nilfs_ioctl_move_blocks() function, which was inlined in
    nilfs_ioctl_clean_segments().
    
    nilfs_ioctl_move_blocks checks duplication of blocks which will be
    moved in garbage collection.  But, the check should have be done
    within nilfs_ioctl_move_inode_block() to prevent list corruption among
    buffers storing the target blocks.
    
    To fix the kernel oops, this moves forward the duplication check
    before the list insertion.
    
    I also tested this for stable trees [2.6.30, 2.6.31].
    Reported-by: default avatarMarkus Trippelsdorf <markus@trippelsdorf.de>
    Signed-off-by: default avatarRyusuke Konishi <konishi.ryusuke@lab.ntt.co.jp>
    Cc: stable <stable@kernel.org>
    5399dd1f
ioctl.c 16.3 KB