bpf: abstract anon_inode_getfd invocations
authorDaniel Borkmann <daniel@iogearbox.net>
Thu, 29 Oct 2015 13:58:06 +0000 (14:58 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 3 Nov 2015 03:48:39 +0000 (22:48 -0500)
Since we're going to use anon_inode_getfd() invocations in more than just
the current places, make a helper function for both, so that we only need
to pass a map/prog pointer to the helper itself in order to get a fd. The
new helpers are called bpf_map_new_fd() and bpf_prog_new_fd().

Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
kernel/bpf/syscall.c

index 687dd6ca574d4c3267b1290cc9f12702ad9346c1..2b89ef0a9757fbf104cd110bd5c64e6f4590cad6 100644 (file)
@@ -111,6 +111,12 @@ static const struct file_operations bpf_map_fops = {
        .release = bpf_map_release,
 };
 
+static int bpf_map_new_fd(struct bpf_map *map)
+{
+       return anon_inode_getfd("bpf-map", &bpf_map_fops, map,
+                               O_RDWR | O_CLOEXEC);
+}
+
 /* helper macro to check that unused fields 'union bpf_attr' are zero */
 #define CHECK_ATTR(CMD) \
        memchr_inv((void *) &attr->CMD##_LAST_FIELD + \
@@ -141,8 +147,7 @@ static int map_create(union bpf_attr *attr)
        if (err)
                goto free_map;
 
-       err = anon_inode_getfd("bpf-map", &bpf_map_fops, map, O_RDWR | O_CLOEXEC);
-
+       err = bpf_map_new_fd(map);
        if (err < 0)
                /* failed to allocate fd */
                goto free_map;
@@ -538,6 +543,12 @@ static const struct file_operations bpf_prog_fops = {
         .release = bpf_prog_release,
 };
 
+static int bpf_prog_new_fd(struct bpf_prog *prog)
+{
+       return anon_inode_getfd("bpf-prog", &bpf_prog_fops, prog,
+                               O_RDWR | O_CLOEXEC);
+}
+
 static struct bpf_prog *get_prog(struct fd f)
 {
        struct bpf_prog *prog;
@@ -647,7 +658,7 @@ static int bpf_prog_load(union bpf_attr *attr)
        if (err < 0)
                goto free_used_maps;
 
-       err = anon_inode_getfd("bpf-prog", &bpf_prog_fops, prog, O_RDWR | O_CLOEXEC);
+       err = bpf_prog_new_fd(prog);
        if (err < 0)
                /* failed to allocate fd */
                goto free_used_maps;