bpf: Refactor cgroups code in prep for new type
authorDavid Ahern <dsa@cumulusnetworks.com>
Thu, 1 Dec 2016 16:48:03 +0000 (08:48 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 2 Dec 2016 18:44:56 +0000 (13:44 -0500)
Code move and rename only; no functional change intended.

Signed-off-by: David Ahern <dsa@cumulusnetworks.com>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/bpf-cgroup.h
kernel/bpf/cgroup.c
kernel/bpf/syscall.c

index 0cf1adf..af2ca8b 100644 (file)
@@ -36,31 +36,31 @@ void cgroup_bpf_update(struct cgroup *cgrp,
                       struct bpf_prog *prog,
                       enum bpf_attach_type type);
 
-int __cgroup_bpf_run_filter(struct sock *sk,
-                           struct sk_buff *skb,
-                           enum bpf_attach_type type);
-
-/* Wrappers for __cgroup_bpf_run_filter() guarded by cgroup_bpf_enabled. */
-#define BPF_CGROUP_RUN_PROG_INET_INGRESS(sk,skb)                       \
-({                                                                     \
-       int __ret = 0;                                                  \
-       if (cgroup_bpf_enabled)                                         \
-               __ret = __cgroup_bpf_run_filter(sk, skb,                \
-                                               BPF_CGROUP_INET_INGRESS); \
-                                                                       \
-       __ret;                                                          \
+int __cgroup_bpf_run_filter_skb(struct sock *sk,
+                               struct sk_buff *skb,
+                               enum bpf_attach_type type);
+
+/* Wrappers for __cgroup_bpf_run_filter_skb() guarded by cgroup_bpf_enabled. */
+#define BPF_CGROUP_RUN_PROG_INET_INGRESS(sk, skb)                            \
+({                                                                           \
+       int __ret = 0;                                                        \
+       if (cgroup_bpf_enabled)                                               \
+               __ret = __cgroup_bpf_run_filter_skb(sk, skb,                  \
+                                                   BPF_CGROUP_INET_INGRESS); \
+                                                                             \
+       __ret;                                                                \
 })
 
-#define BPF_CGROUP_RUN_PROG_INET_EGRESS(sk,skb)                                \
-({                                                                     \
-       int __ret = 0;                                                  \
-       if (cgroup_bpf_enabled && sk && sk == skb->sk) {                \
-               typeof(sk) __sk = sk_to_full_sk(sk);                    \
-               if (sk_fullsock(__sk))                                  \
-                       __ret = __cgroup_bpf_run_filter(__sk, skb,      \
-                                               BPF_CGROUP_INET_EGRESS); \
-       }                                                               \
-       __ret;                                                          \
+#define BPF_CGROUP_RUN_PROG_INET_EGRESS(sk, skb)                              \
+({                                                                            \
+       int __ret = 0;                                                         \
+       if (cgroup_bpf_enabled && sk && sk == skb->sk) {                       \
+               typeof(sk) __sk = sk_to_full_sk(sk);                           \
+               if (sk_fullsock(__sk))                                         \
+                       __ret = __cgroup_bpf_run_filter_skb(__sk, skb,         \
+                                                     BPF_CGROUP_INET_EGRESS); \
+       }                                                                      \
+       __ret;                                                                 \
 })
 
 #else
index 8c784f8..8fe55ff 100644 (file)
@@ -118,7 +118,7 @@ void __cgroup_bpf_update(struct cgroup *cgrp,
 }
 
 /**
- * __cgroup_bpf_run_filter() - Run a program for packet filtering
+ * __cgroup_bpf_run_filter_skb() - Run a program for packet filtering
  * @sk: The socken sending or receiving traffic
  * @skb: The skb that is being sent or received
  * @type: The type of program to be exectuted
@@ -132,9 +132,9 @@ void __cgroup_bpf_update(struct cgroup *cgrp,
  * This function will return %-EPERM if any if an attached program was found
  * and if it returned != 1 during execution. In all other cases, 0 is returned.
  */
-int __cgroup_bpf_run_filter(struct sock *sk,
-                           struct sk_buff *skb,
-                           enum bpf_attach_type type)
+int __cgroup_bpf_run_filter_skb(struct sock *sk,
+                               struct sk_buff *skb,
+                               enum bpf_attach_type type)
 {
        struct bpf_prog *prog;
        struct cgroup *cgrp;
@@ -164,4 +164,4 @@ int __cgroup_bpf_run_filter(struct sock *sk,
 
        return ret;
 }
-EXPORT_SYMBOL(__cgroup_bpf_run_filter);
+EXPORT_SYMBOL(__cgroup_bpf_run_filter_skb);
index 4caa18e..5518a68 100644 (file)
@@ -856,6 +856,7 @@ static int bpf_prog_attach(const union bpf_attr *attr)
 {
        struct bpf_prog *prog;
        struct cgroup *cgrp;
+       enum bpf_prog_type ptype;
 
        if (!capable(CAP_NET_ADMIN))
                return -EPERM;
@@ -866,25 +867,26 @@ static int bpf_prog_attach(const union bpf_attr *attr)
        switch (attr->attach_type) {
        case BPF_CGROUP_INET_INGRESS:
        case BPF_CGROUP_INET_EGRESS:
-               prog = bpf_prog_get_type(attr->attach_bpf_fd,
-                                        BPF_PROG_TYPE_CGROUP_SKB);
-               if (IS_ERR(prog))
-                       return PTR_ERR(prog);
-
-               cgrp = cgroup_get_from_fd(attr->target_fd);
-               if (IS_ERR(cgrp)) {
-                       bpf_prog_put(prog);
-                       return PTR_ERR(cgrp);
-               }
-
-               cgroup_bpf_update(cgrp, prog, attr->attach_type);
-               cgroup_put(cgrp);
+               ptype = BPF_PROG_TYPE_CGROUP_SKB;
                break;
 
        default:
                return -EINVAL;
        }
 
+       prog = bpf_prog_get_type(attr->attach_bpf_fd, ptype);
+       if (IS_ERR(prog))
+               return PTR_ERR(prog);
+
+       cgrp = cgroup_get_from_fd(attr->target_fd);
+       if (IS_ERR(cgrp)) {
+               bpf_prog_put(prog);
+               return PTR_ERR(cgrp);
+       }
+
+       cgroup_bpf_update(cgrp, prog, attr->attach_type);
+       cgroup_put(cgrp);
+
        return 0;
 }