summaryrefslogtreecommitdiff
path: root/include/linux/filter.h
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2016-01-06 22:54:18 -0500
committerDavid S. Miller <davem@davemloft.net>2016-01-06 22:54:18 -0500
commit9e0efaf6b41bf22c2eb81258fc2a6f1538a643e5 (patch)
treee2daa5fb47f707f44b6b7e9da82a6d8017af3f8c /include/linux/filter.h
parentc7f5d105495a38ed09e70d825f75d9d7d5407264 (diff)
parent51cb67c0b0fcb91581b15bd2e85f29af4d4b2df6 (diff)
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
Diffstat (limited to 'include/linux/filter.h')
-rw-r--r--include/linux/filter.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/include/linux/filter.h b/include/linux/filter.h
index 294c3cdf07b3..f5b5891ed1ba 100644
--- a/include/linux/filter.h
+++ b/include/linux/filter.h
@@ -495,6 +495,25 @@ static inline void bpf_jit_free(struct bpf_prog *fp)
#define BPF_ANC BIT(15)
+static inline bool bpf_needs_clear_a(const struct sock_filter *first)
+{
+ switch (first->code) {
+ case BPF_RET | BPF_K:
+ case BPF_LD | BPF_W | BPF_LEN:
+ return false;
+
+ case BPF_LD | BPF_W | BPF_ABS:
+ case BPF_LD | BPF_H | BPF_ABS:
+ case BPF_LD | BPF_B | BPF_ABS:
+ if (first->k == SKF_AD_OFF + SKF_AD_ALU_XOR_X)
+ return true;
+ return false;
+
+ default:
+ return true;
+ }
+}
+
static inline u16 bpf_anc_helper(const struct sock_filter *ftest)
{
BUG_ON(ftest->code & BPF_ANC);