• Shigeru Yoshida's avatar
    udf: Avoid double brelse() in udf_rename() · c791730f
    Shigeru Yoshida authored
    syzbot reported a warning like below [1]:
    
    VFS: brelse: Trying to free free buffer
    WARNING: CPU: 2 PID: 7301 at fs/buffer.c:1145 __brelse+0x67/0xa0
    ...
    Call Trace:
     <TASK>
     invalidate_bh_lru+0x99/0x150
     smp_call_function_many_cond+0xe2a/0x10c0
     ? generic_remap_file_range_prep+0x50/0x50
     ? __brelse+0xa0/0xa0
     ? __mutex_lock+0x21c/0x12d0
     ? smp_call_on_cpu+0x250/0x250
     ? rcu_read_lock_sched_held+0xb/0x60
     ? lock_release+0x587/0x810
     ? __brelse+0xa0/0xa0
     ? generic_remap_file_range_prep+0x50/0x50
     on_each_cpu_cond_mask+0x3c/0x80
     blkdev_flush_mapping+0x13a/0x2f0
     blkdev_put_whole+0xd3/0xf0
     blkdev_put+0x222/0x760
     deactivate_locked_super+0x96/0x160
     deactivate_super+0xda/0x100
     cleanup_mnt+0x222/0x3d0
     task_work_run+0x149/0x240
     ? task_work_cancel+0x30/0x30
     do_exit+0xb29/0x2a40
     ? reacquire_held_locks+0x4a0/0x4a0
     ? do_raw_spin_lock+0x12a/0x2b0
     ? mm_update_next_owner+0x7c0/0x7c0
     ? rwlock_bug.part.0+0x90/0x90
     ? zap_other_threads+0x234/0x2d0
     do_group_exit+0xd0/0x2a0
     __x64_sys_exit_group+0x3a/0x50
     do_syscall_64+0x34/0xb0
     entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    The cause of the issue is that brelse() is called on both ofibh.sbh
    and ofibh.ebh by udf_find_entry() when it returns NULL.  However,
    brelse() is called by udf_rename(), too.  So, b_count on buffer_head
    becomes unbalanced.
    
    This patch fixes the issue by not calling brelse() by udf_rename()
    when udf_find_entry() returns NULL.
    
    Link: https://syzkaller.appspot.com/bug?id=8297f45698159c6bca8a1f87dc983667c1a1c851 [1]
    Reported-by: syzbot+7902cd7684bc35306224@syzkaller.appspotmail.com
    Signed-off-by: default avatarShigeru Yoshida <syoshida@redhat.com>
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    Link: https://lore.kernel.org/r/20221023095741.271430-1-syoshida@redhat.com
    c791730f
namei.c 34.2 KB