Thread (4 messages) 4 messages, 3 authors, 2012-04-01

Re: [PATCH] net: bpf_jit: fix BPF_S_ALU_AND_K compilation

From: Eric Dumazet <hidden>
Date: 2012-03-31 10:23:12
Also in: lkml, stable

On Sat, 2012-03-31 at 20:52 +1100, Indan Zupancic wrote:
quoted hunk ↗ jump to hunk
Hello,

Finally, after much searching I found one little bug.

[PATCH] net: bpf_jit: fix BPF_S_ALU_AND_K compilation

Small typo resulted in bad code generation for certain
values of K for the BPF_S_ALU_AND_K instruction.

Signed-off-by: Indan Zupancic <redacted>
---
diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c
index 7c1b765..28bc807 100644
--- a/arch/x86/net/bpf_jit_comp.c
+++ b/arch/x86/net/bpf_jit_comp.c
@@ -289,7 +289,7 @@ void bpf_jit_compile(struct sk_filter *fp)
 					EMIT2(0x24, K & 0xFF); /* and imm8,%al */
 				} else if (K >= 0xFFFF0000) {
 					EMIT2(0x66, 0x25);	/* and imm16,%ax */
-					EMIT2(K, 2);
+					EMIT(K, 2);
 				} else {
 					EMIT1_off32(0x25, K);	/* and imm32,%eax */
 				}
Thanks but it was already fixed.

commit 1d24fb3684f347226747c6b11ea426b7b992694e
Author: zhuangfeiran@ict.ac.cn [off-list ref]
Date:   Wed Mar 28 23:27:00 2012 +0000

    x86 bpf_jit: fix a bug in emitting the 16-bit immediate operand of AND
    
    When K >= 0xFFFF0000, AND needs the two least significant bytes of K as
    its operand, but EMIT2() gives it the least significant byte of K and
    0x2. EMIT() should be used here to replace EMIT2().
    
    Signed-off-by: Feiran Zhuang  [off-list ref]
    Acked-by: Eric Dumazet [off-list ref]
    Signed-off-by: David S. Miller [off-list ref]
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help