Thread (40 messages) flat view 40 messages, 4 authors, 2016-08-31

Re: [RFCv2 07/16] bpf: enable non-core use of the verfier

From: Alexei Starovoitov <hidden>
Date: 2016-08-31 01:18:12

On Tue, Aug 30, 2016 at 11:00:38PM +0200, Daniel Borkmann wrote:
On 08/30/2016 10:48 PM, Alexei Starovoitov wrote:
quoted
On Tue, Aug 30, 2016 at 10:22:46PM +0200, Jakub Kicinski wrote:
quoted
On Tue, 30 Aug 2016 21:07:50 +0200, Daniel Borkmann wrote:
quoted
quoted
Having two modes seems more straight forward and I think we would only
need to pay attention in the LD_IMM64 case, I don't think I've seen
LLVM generating XORs, it's just the cBPF -> eBPF conversion.
Okay, though, I think that the cBPF to eBPF migration wouldn't even
pass through the bpf_parse() handling, since verifier is not aware on
some of their aspects such as emitting calls directly (w/o *proto) or
arg mappings. Probably make sense to reject these (bpf_prog_was_classic())
if they cannot be handled anyway?
TBH again I only use cBPF for testing.  It's a convenient way of
generating certain instruction sequences.  I can probably just drop
it completely but the XOR patch is just 3 lines of code so not a huge
cost either...  I'll keep patch 6 in my tree for now.
if xor matching is only need for classic, I would drop that patch
just to avoid unnecessary state collection. The number of lines
is not a concern, but extra state for state prunning is.
quoted
Alternatively - is there any eBPF assembler out there?  Something
converting verifier output back into ELF would be quite cool.
would certainly be nice. I don't think there is anything standalone.
btw llvm can be made to work as assembler only, but simple flex/bison
is probably better.
Never tried it out, but seems llvm backend doesn't have asm parser
implemented?

  $ clang -target bpf -O2 -c foo.c -S -o foo.S
  $ llvm-mc -arch bpf foo.S -filetype=obj -o foo.o
  llvm-mc: error: this target does not support assembly parsing.

LLVM IR might work, but maybe too high level(?); alternatively, we could
make bpf_asm from tools/net/ eBPF aware for debugging purposes. If you
have a toolchain supporting libbfd et al, you could probably make use
of bpf_jit_dump() (like JITs do) and then bpf_jit_disasm tool (from
same dir as bpf_asm).
yes. llvm-based bpf asm is not complete. It's straightforward to add though.
It won't be going through IR. Only 'mc' (machine instruciton) layer.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help