From f60b286d9a4ac523e8717cd0998592469f5150f2 Mon Sep 17 00:00:00 2001 From: Daniel Borkmann Date: Mon, 24 Sep 2012 07:34:51 +0000 Subject: [PATCH] --- yaml --- r: 328097 b: refs/heads/master c: 82c93fcc2e1737fede2752520f1bf8f4de6304d8 h: refs/heads/master i: 328095: 8a16a488855f17cebb3a911689bb093b6e0f9e22 v: v3 --- [refs] | 2 +- trunk/arch/x86/net/bpf_jit_comp.c | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 5ce6037ce93e..b5fcdd8ee3ae 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 9e49e88958feb41ec701fa34b44723dabadbc28c +refs/heads/master: 82c93fcc2e1737fede2752520f1bf8f4de6304d8 diff --git a/trunk/arch/x86/net/bpf_jit_comp.c b/trunk/arch/x86/net/bpf_jit_comp.c index 106c57829120..520d2bd0b9c5 100644 --- a/trunk/arch/x86/net/bpf_jit_comp.c +++ b/trunk/arch/x86/net/bpf_jit_comp.c @@ -335,9 +335,18 @@ void bpf_jit_compile(struct sk_filter *fp) EMIT1_off32(0x0d, K); /* or imm32,%eax */ break; case BPF_S_ANC_ALU_XOR_X: /* A ^= X; */ + case BPF_S_ALU_XOR_X: seen |= SEEN_XREG; EMIT2(0x31, 0xd8); /* xor %ebx,%eax */ break; + case BPF_S_ALU_XOR_K: /* A ^= K; */ + if (K == 0) + break; + if (is_imm8(K)) + EMIT3(0x83, 0xf0, K); /* xor imm8,%eax */ + else + EMIT1_off32(0x35, K); /* xor imm32,%eax */ + break; case BPF_S_ALU_LSH_X: /* A <<= X; */ seen |= SEEN_XREG; EMIT4(0x89, 0xd9, 0xd3, 0xe0); /* mov %ebx,%ecx; shl %cl,%eax */