net: filter: move load_pointer() into filter.h
authorZi Shen Lim <zlim.lnx@gmail.com>
Thu, 3 Jul 2014 14:56:54 +0000 (07:56 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 8 Jul 2014 21:20:00 +0000 (14:20 -0700)
load_pointer() is already a static inline function.
Let's move it into filter.h so BPF JIT implementations can reuse this
function.

Since we're exporting this function, let's also rename it to
bpf_load_pointer() for clarity.

Signed-off-by: Zi Shen Lim <zlim.lnx@gmail.com>
Reviewed-by: Daniel Borkmann <dborkman@redhat.com>
Acked-by: Alexei Starovoitov <ast@plumgrid.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/linux/filter.h
net/core/filter.c

index a7e3c48d73a70677f88fcbf68c89e62f1caf159f..b885dcb7eacae9de26bdb6d8d38dc3f85b89c406 100644 (file)
@@ -6,6 +6,7 @@
 
 #include <linux/atomic.h>
 #include <linux/compat.h>
+#include <linux/skbuff.h>
 #include <linux/workqueue.h>
 #include <uapi/linux/filter.h>
 
@@ -406,6 +407,18 @@ static inline u16 bpf_anc_helper(const struct sock_filter *ftest)
        }
 }
 
+void *bpf_internal_load_pointer_neg_helper(const struct sk_buff *skb,
+                                          int k, unsigned int size);
+
+static inline void *bpf_load_pointer(const struct sk_buff *skb, int k,
+                                    unsigned int size, void *buffer)
+{
+       if (k >= 0)
+               return skb_header_pointer(skb, k, size, buffer);
+
+       return bpf_internal_load_pointer_neg_helper(skb, k, size);
+}
+
 #ifdef CONFIG_BPF_JIT
 #include <stdarg.h>
 #include <linux/linkage.h>
index 1dbf6462f766541a20db14a3917c9f0813e73652..87af1e3e56c06c08cfc52f695ed991b29d1f297f 100644 (file)
@@ -84,15 +84,6 @@ void *bpf_internal_load_pointer_neg_helper(const struct sk_buff *skb, int k, uns
        return NULL;
 }
 
-static inline void *load_pointer(const struct sk_buff *skb, int k,
-                                unsigned int size, void *buffer)
-{
-       if (k >= 0)
-               return skb_header_pointer(skb, k, size, buffer);
-
-       return bpf_internal_load_pointer_neg_helper(skb, k, size);
-}
-
 /**
  *     sk_filter - run a packet through a socket filter
  *     @sk: sock associated with &sk_buff
@@ -537,7 +528,7 @@ load_word:
                 *   BPF_R0 - 8/16/32-bit skb data converted to cpu endianness
                 */
 
-               ptr = load_pointer((struct sk_buff *) (unsigned long) CTX, off, 4, &tmp);
+               ptr = bpf_load_pointer((struct sk_buff *) (unsigned long) CTX, off, 4, &tmp);
                if (likely(ptr != NULL)) {
                        BPF_R0 = get_unaligned_be32(ptr);
                        CONT;
@@ -547,7 +538,7 @@ load_word:
        LD_ABS_H: /* BPF_R0 = ntohs(*(u16 *) (skb->data + imm32)) */
                off = IMM;
 load_half:
-               ptr = load_pointer((struct sk_buff *) (unsigned long) CTX, off, 2, &tmp);
+               ptr = bpf_load_pointer((struct sk_buff *) (unsigned long) CTX, off, 2, &tmp);
                if (likely(ptr != NULL)) {
                        BPF_R0 = get_unaligned_be16(ptr);
                        CONT;
@@ -557,7 +548,7 @@ load_half:
        LD_ABS_B: /* BPF_R0 = *(u8 *) (skb->data + imm32) */
                off = IMM;
 load_byte:
-               ptr = load_pointer((struct sk_buff *) (unsigned long) CTX, off, 1, &tmp);
+               ptr = bpf_load_pointer((struct sk_buff *) (unsigned long) CTX, off, 1, &tmp);
                if (likely(ptr != NULL)) {
                        BPF_R0 = *(u8 *)ptr;
                        CONT;