]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
bpf: convert __bpf_prog_get() to CLASS(fd, ...)
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 30 Jul 2024 05:16:02 +0000 (01:16 -0400)
committerAndrii Nakryiko <andrii@kernel.org>
Tue, 13 Aug 2024 22:57:53 +0000 (15:57 -0700)
Irregularity here is fdput() not in the same scope as fdget();
just fold ____bpf_prog_get() into its (only) caller and that's
it...

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Acked-by: Andrii Nakryiko <andrii@kernel.org>
Reviewed-by: Christian Brauner <brauner@kernel.org>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
kernel/bpf/syscall.c

index 3093bf2cc2660be7308a410064cd7b9b3ad57018..4909e3f230658b178c142b88ef4ac25d1d88bfd9 100644 (file)
@@ -2407,18 +2407,6 @@ int bpf_prog_new_fd(struct bpf_prog *prog)
                                O_RDWR | O_CLOEXEC);
 }
 
-static struct bpf_prog *____bpf_prog_get(struct fd f)
-{
-       if (!fd_file(f))
-               return ERR_PTR(-EBADF);
-       if (fd_file(f)->f_op != &bpf_prog_fops) {
-               fdput(f);
-               return ERR_PTR(-EINVAL);
-       }
-
-       return fd_file(f)->private_data;
-}
-
 void bpf_prog_add(struct bpf_prog *prog, int i)
 {
        atomic64_add(i, &prog->aux->refcnt);
@@ -2474,20 +2462,19 @@ bool bpf_prog_get_ok(struct bpf_prog *prog,
 static struct bpf_prog *__bpf_prog_get(u32 ufd, enum bpf_prog_type *attach_type,
                                       bool attach_drv)
 {
-       struct fd f = fdget(ufd);
+       CLASS(fd, f)(ufd);
        struct bpf_prog *prog;
 
-       prog = ____bpf_prog_get(f);
-       if (IS_ERR(prog))
-               return prog;
-       if (!bpf_prog_get_ok(prog, attach_type, attach_drv)) {
-               prog = ERR_PTR(-EINVAL);
-               goto out;
-       }
+       if (fd_empty(f))
+               return ERR_PTR(-EBADF);
+       if (fd_file(f)->f_op != &bpf_prog_fops)
+               return ERR_PTR(-EINVAL);
+
+       prog = fd_file(f)->private_data;
+       if (!bpf_prog_get_ok(prog, attach_type, attach_drv))
+               return ERR_PTR(-EINVAL);
 
        bpf_prog_inc(prog);
-out:
-       fdput(f);
        return prog;
 }