linux/arch/sparc/net
Alexei Starovoitov 35607b02db sparc: bpf_jit: fix loads from negative offsets
- fix BPF_LD|ABS|IND from negative offsets:
  make sure to sign extend lower 32 bits in 64-bit register
  before calling C helpers from JITed code, otherwise 'int k'
  argument of bpf_internal_load_pointer_neg_helper() function
  will be added as large unsigned integer, causing packet size
  check to trigger and abort the program.

  It's worth noting that JITed code for 'A = A op K' will affect
  upper 32 bits differently depending whether K is simm13 or not.
  Since small constants are sign extended, whereas large constants
  are stored in temp register and zero extended.
  That is ok and we don't have to pay a penalty of sign extension
  for every sethi, since all classic BPF instructions have 32-bit
  semantics and we only need to set correct upper bits when
  transitioning from JITed code into C.

- though instructions 'A &= 0' and 'A *= 0' are odd, JIT compiler
  should not optimize them out

Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2014-09-24 15:04:07 -04:00
..
bpf_jit_asm.S sparc: bpf_jit: fix loads from negative offsets 2014-09-24 15:04:07 -04:00
bpf_jit_comp.c sparc: bpf_jit: fix loads from negative offsets 2014-09-24 15:04:07 -04:00
bpf_jit.h net: filter: Fix some more small issues in sparc JIT. 2012-04-17 16:43:46 -04:00
Makefile net: filter: Just In Time compiler for sparc 2012-04-16 23:15:14 -04:00