[51/67] net: bpf_jit: fix an off-one bug in x86_64 cond jump target
From: Greg KH <gregkh@suse.de>
Date: 2012-01-03 22:37:10
Also in:
lkml
From: Greg KH <gregkh@suse.de>
Date: 2012-01-03 22:37:10
Also in:
lkml
3.0-stable review patch. If anyone has any objections, please let me know. ------------------ From: Markus K���tter <redacted> [ Upstream commit a03ffcf873fe0f2565386ca8ef832144c42e67fa ] x86 jump instruction size is 2 or 5 bytes (near/long jump), not 2 or 6 bytes. In case a conditional jump is followed by a long jump, conditional jump target is one byte past the start of target instruction. Signed-off-by: Markus K���tter <redacted> Signed-off-by: Eric Dumazet <redacted> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> --- arch/x86/net/bpf_jit_comp.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
--- a/arch/x86/net/bpf_jit_comp.c
+++ b/arch/x86/net/bpf_jit_comp.c@@ -568,8 +568,8 @@ cond_branch: f_offset = addrs[i + filt break; } if (filter[i].jt != 0) { - if (filter[i].jf) - t_offset += is_near(f_offset) ? 2 : 6; + if (filter[i].jf && f_offset) + t_offset += is_near(f_offset) ? 2 : 5; EMIT_COND_JMP(t_op, t_offset); if (filter[i].jf) EMIT_JMP(f_offset);