powerpc/bpf: Add support for bpf constant blinding
authorNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Fri, 23 Sep 2016 20:35:02 +0000 (02:05 +0530)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 4 Oct 2016 09:33:20 +0000 (20:33 +1100)
commitb7b7013cac55d794940bd9cb7b7c55c9dececac4
tree4244ad0533792e7c2bc807983956912a6f8d9a21
parentce0761419faefbe9e450749ccc879ff88843af12
powerpc/bpf: Add support for bpf constant blinding

In line with similar support for other architectures by Daniel Borkmann.

'MOD Default X' from test_bpf without constant blinding:
84 bytes emitted from JIT compiler (pass:3, flen:7)
d0000000058a4688 + <x>:
   0: nop
   4: nop
   8: std     r27,-40(r1)
   c: std     r28,-32(r1)
  10: xor     r8,r8,r8
  14: xor     r28,r28,r28
  18: mr      r27,r3
  1c: li      r8,66
  20: cmpwi   r28,0
  24: bne     0x0000000000000030
  28: li      r8,0
  2c: b       0x0000000000000044
  30: divwu   r9,r8,r28
  34: mullw   r9,r28,r9
  38: subf    r8,r9,r8
  3c: rotlwi  r8,r8,0
  40: li      r8,66
  44: ld      r27,-40(r1)
  48: ld      r28,-32(r1)
  4c: mr      r3,r8
  50: blr

... and with constant blinding:
140 bytes emitted from JIT compiler (pass:3, flen:11)
d00000000bd6ab24 + <x>:
   0: nop
   4: nop
   8: std     r27,-40(r1)
   c: std     r28,-32(r1)
  10: xor     r8,r8,r8
  14: xor     r28,r28,r28
  18: mr      r27,r3
  1c: lis     r2,-22834
  20: ori     r2,r2,36083
  24: rotlwi  r2,r2,0
  28: xori    r2,r2,36017
  2c: xoris   r2,r2,42702
  30: rotlwi  r2,r2,0
  34: mr      r8,r2
  38: rotlwi  r8,r8,0
  3c: cmpwi   r28,0
  40: bne     0x000000000000004c
  44: li      r8,0
  48: b       0x000000000000007c
  4c: divwu   r9,r8,r28
  50: mullw   r9,r28,r9
  54: subf    r8,r9,r8
  58: rotlwi  r8,r8,0
  5c: lis     r2,-17137
  60: ori     r2,r2,39065
  64: rotlwi  r2,r2,0
  68: xori    r2,r2,39131
  6c: xoris   r2,r2,48399
  70: rotlwi  r2,r2,0
  74: mr      r8,r2
  78: rotlwi  r8,r8,0
  7c: ld      r27,-40(r1)
  80: ld      r28,-32(r1)
  84: mr      r3,r8
  88: blr

Signed-off-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/net/bpf_jit64.h
arch/powerpc/net/bpf_jit_comp64.c