• Z
    ovl: fix missing negative dentry check in ovl_rename() · 8994023e
    Zheng Liang 提交于
    mainline inclusion
    from mainline-v5.15-rc5
    commit a295aef6
    category: bugfix
    bugzilla: NA
    CVE: NA
    
    -------------------------------------------------
    
    The following reproducer
    
      mkdir lower upper work merge
      touch lower/old
      touch lower/new
      mount -t overlay overlay -olowerdir=lower,upperdir=upper,workdir=work merge
      rm merge/new
      mv merge/old merge/new & unlink upper/new
    
    may result in this race:
    
    PROCESS A:
      rename("merge/old", "merge/new");
      overwrite=true,ovl_lower_positive(old)=true,
      ovl_dentry_is_whiteout(new)=true -> flags |= RENAME_EXCHANGE
    
    PROCESS B:
      unlink("upper/new");
    
    PROCESS A:
      lookup newdentry in new_upperdir
      call vfs_rename() with negative newdentry and RENAME_EXCHANGE
    
    Fix by adding the missing check for negative newdentry.
    Signed-off-by: NZheng Liang <zhengliang6@huawei.com>
    Fixes: e9be9d5e ("overlay filesystem")
    Cc: <stable@vger.kernel.org> # v3.18
    Signed-off-by: NMiklos Szeredi <mszeredi@redhat.com>
    Reviewed-by: NZhang Yi <yi.zhang@huawei.com>
    Signed-off-by: NYang Yingliang <yangyingliang@huawei.com>
    8994023e
dir.c 28.8 KB