|
@@ -187,6 +187,13 @@ unsigned int sk_run_filter(const struct sk_buff *skb,
|
|
|
case BPF_S_ALU_OR_K:
|
|
|
A |= K;
|
|
|
continue;
|
|
|
+ case BPF_S_ANC_ALU_XOR_X:
|
|
|
+ case BPF_S_ALU_XOR_X:
|
|
|
+ A ^= X;
|
|
|
+ continue;
|
|
|
+ case BPF_S_ALU_XOR_K:
|
|
|
+ A ^= K;
|
|
|
+ continue;
|
|
|
case BPF_S_ALU_LSH_X:
|
|
|
A <<= X;
|
|
|
continue;
|
|
@@ -334,9 +341,6 @@ load_b:
|
|
|
case BPF_S_ANC_CPU:
|
|
|
A = raw_smp_processor_id();
|
|
|
continue;
|
|
|
- case BPF_S_ANC_ALU_XOR_X:
|
|
|
- A ^= X;
|
|
|
- continue;
|
|
|
case BPF_S_ANC_NLATTR: {
|
|
|
struct nlattr *nla;
|
|
|
|
|
@@ -483,6 +487,8 @@ int sk_chk_filter(struct sock_filter *filter, unsigned int flen)
|
|
|
[BPF_ALU|BPF_AND|BPF_X] = BPF_S_ALU_AND_X,
|
|
|
[BPF_ALU|BPF_OR|BPF_K] = BPF_S_ALU_OR_K,
|
|
|
[BPF_ALU|BPF_OR|BPF_X] = BPF_S_ALU_OR_X,
|
|
|
+ [BPF_ALU|BPF_XOR|BPF_K] = BPF_S_ALU_XOR_K,
|
|
|
+ [BPF_ALU|BPF_XOR|BPF_X] = BPF_S_ALU_XOR_X,
|
|
|
[BPF_ALU|BPF_LSH|BPF_K] = BPF_S_ALU_LSH_K,
|
|
|
[BPF_ALU|BPF_LSH|BPF_X] = BPF_S_ALU_LSH_X,
|
|
|
[BPF_ALU|BPF_RSH|BPF_K] = BPF_S_ALU_RSH_K,
|