void bpf_prog_put(struct bpf_prog *prog);
 void bpf_prog_put_rcu(struct bpf_prog *prog);
 
-struct bpf_map *bpf_map_get(struct fd f);
+struct bpf_map *__bpf_map_get(struct fd f);
 void bpf_map_put(struct bpf_map *map);
 
 extern int sysctl_unprivileged_bpf_disabled;
 
 /* if error is returned, fd is released.
  * On success caller should complete fd access with matching fdput()
  */
-struct bpf_map *bpf_map_get(struct fd f)
+struct bpf_map *__bpf_map_get(struct fd f)
 {
-       struct bpf_map *map;
-
        if (!f.file)
                return ERR_PTR(-EBADF);
-
        if (f.file->f_op != &bpf_map_fops) {
                fdput(f);
                return ERR_PTR(-EINVAL);
        }
 
-       map = f.file->private_data;
+       return f.file->private_data;
+}
+
+static struct bpf_map *bpf_map_get(u32 ufd)
+{
+       struct fd f = fdget(ufd);
+       struct bpf_map *map;
+
+       map = __bpf_map_get(f);
+       if (IS_ERR(map))
+               return map;
+
+       atomic_inc(&map->refcnt);
+       fdput(f);
 
        return map;
 }
                return -EINVAL;
 
        f = fdget(ufd);
-       map = bpf_map_get(f);
+       map = __bpf_map_get(f);
        if (IS_ERR(map))
                return PTR_ERR(map);
 
                return -EINVAL;
 
        f = fdget(ufd);
-       map = bpf_map_get(f);
+       map = __bpf_map_get(f);
        if (IS_ERR(map))
                return PTR_ERR(map);
 
                return -EINVAL;
 
        f = fdget(ufd);
-       map = bpf_map_get(f);
+       map = __bpf_map_get(f);
        if (IS_ERR(map))
                return PTR_ERR(map);
 
                return -EINVAL;
 
        f = fdget(ufd);
-       map = bpf_map_get(f);
+       map = __bpf_map_get(f);
        if (IS_ERR(map))
                return PTR_ERR(map);
 
                                O_RDWR | O_CLOEXEC);
 }
 
-static struct bpf_prog *get_prog(struct fd f)
+static struct bpf_prog *__bpf_prog_get(struct fd f)
 {
-       struct bpf_prog *prog;
-
        if (!f.file)
                return ERR_PTR(-EBADF);
-
        if (f.file->f_op != &bpf_prog_fops) {
                fdput(f);
                return ERR_PTR(-EINVAL);
        }
 
-       prog = f.file->private_data;
-
-       return prog;
+       return f.file->private_data;
 }
 
 /* called by sockets/tracing/seccomp before attaching program to an event
        struct fd f = fdget(ufd);
        struct bpf_prog *prog;
 
-       prog = get_prog(f);
-
+       prog = __bpf_prog_get(f);
        if (IS_ERR(prog))
                return prog;
 
        atomic_inc(&prog->aux->refcnt);
        fdput(f);
+
        return prog;
 }
 EXPORT_SYMBOL_GPL(bpf_prog_get);