diff --git a/kernel/bpf/syscall.c b/kernel/bpf/syscall.c index 947d39e05cf3..da78e1cf6ade 100644 --- a/kernel/bpf/syscall.c +++ b/kernel/bpf/syscall.c @@ -3905,7 +3905,6 @@ static int bpf_task_fd_query(const union bpf_attr *attr, pid_t pid = attr->task_fd_query.pid; u32 fd = attr->task_fd_query.fd; const struct perf_event *event; - struct files_struct *files; struct task_struct *task; struct file *file; int err; @@ -3925,23 +3924,11 @@ static int bpf_task_fd_query(const union bpf_attr *attr, if (!task) return -ENOENT; - files = get_files_struct(task); - put_task_struct(task); - if (!files) - return -ENOENT; - err = 0; - spin_lock(&files->file_lock); - file = fcheck_files(files, fd); + file = fget_task(task, fd); + put_task_struct(task); if (!file) - err = -EBADF; - else - get_file(file); - spin_unlock(&files->file_lock); - put_files_struct(files); - - if (err) - goto out; + return -EBADF; if (file->f_op == &bpf_link_fops) { struct bpf_link *link = file->private_data; @@ -3981,7 +3968,6 @@ out_not_supp: err = -ENOTSUPP; put_file: fput(file); -out: return err; }