On Sat, 2024-11-02 at 05:08 +0000, Al Viro wrote: > fdget() is the first thing done in scope, all matching fdput() are > immediately followed by leaving the scope. > > Reviewed-by: Christian Brauner <brauner@xxxxxxxxxx> > Signed-off-by: Al Viro <viro@xxxxxxxxxxxxxxxxxx> > --- > arch/powerpc/kvm/book3s_64_vio.c | 21 +++--------- > arch/powerpc/kvm/powerpc.c | 24 ++++--------- > arch/powerpc/platforms/cell/spu_syscalls.c | 6 ++-- > arch/x86/kernel/cpu/sgx/main.c | 10 ++---- > arch/x86/kvm/svm/sev.c | 39 ++++++++------------ > -- > drivers/gpu/drm/amd/amdgpu/amdgpu_sched.c | 23 ++++--------- > drivers/gpu/drm/drm_syncobj.c | 9 ++--- > drivers/media/rc/lirc_dev.c | 13 +++----- > fs/btrfs/ioctl.c | 5 ++- > fs/eventfd.c | 9 ++--- > fs/eventpoll.c | 23 ++++--------- > fs/fhandle.c | 5 ++- > fs/ioctl.c | 23 +++++-------- > fs/kernel_read_file.c | 12 +++---- > fs/notify/fanotify/fanotify_user.c | 15 +++------ > fs/notify/inotify/inotify_user.c | 17 +++------- > fs/open.c | 36 +++++++++----------- > fs/read_write.c | 28 +++++----------- > fs/signalfd.c | 9 ++--- > fs/sync.c | 29 ++++++---------- > io_uring/sqpoll.c | 29 +++++----------- > kernel/events/core.c | 14 +++----- > kernel/nsproxy.c | 5 ++- > kernel/pid.c | 7 ++-- > kernel/sys.c | 15 +++------ > kernel/watch_queue.c | 6 ++-- > mm/fadvise.c | 10 ++---- > mm/readahead.c | 17 +++------- > net/core/net_namespace.c | 10 +++--- > security/landlock/syscalls.c | 26 +++++---------- > virt/kvm/vfio.c | 8 ++--- > 31 files changed, 164 insertions(+), 339 deletions(-) [...] > diff --git a/fs/read_write.c b/fs/read_write.c > index ef3ee3725714..5e3df2d39283 100644 > --- a/fs/read_write.c > +++ b/fs/read_write.c > @@ -1663,36 +1663,32 @@ SYSCALL_DEFINE6(copy_file_range, int, fd_in, > loff_t __user *, off_in, > { > loff_t pos_in; > loff_t pos_out; > - struct fd f_in; > - struct fd f_out; > ssize_t ret = -EBADF; This initialization is no longer needed. > > - f_in = fdget(fd_in); > - if (!fd_file(f_in)) > - goto out2; > + CLASS(fd, f_in)(fd_in); > + if (fd_empty(f_in)) > + return -EBADF; > > - f_out = fdget(fd_out); > - if (!fd_file(f_out)) > - goto out1; > + CLASS(fd, f_out)(fd_out); > + if (fd_empty(f_out)) > + return -EBADF; > > - ret = -EFAULT; > if (off_in) { > if (copy_from_user(&pos_in, off_in, sizeof(loff_t))) > - goto out; > + return -EFAULT; > } else { > pos_in = fd_file(f_in)->f_pos; > } > > if (off_out) { > if (copy_from_user(&pos_out, off_out, > sizeof(loff_t))) > - goto out; > + return -EFAULT; > } else { > pos_out = fd_file(f_out)->f_pos; > } > > - ret = -EINVAL; > if (flags != 0) > - goto out; > + return -EINVAL; > > ret = vfs_copy_file_range(fd_file(f_in), pos_in, > fd_file(f_out), pos_out, len, > flags);