linux/kernel/bpf
Alexei Starovoitov 9bac3d6d54 bpf: allow extended BPF programs access skb fields
introduce user accessible mirror of in-kernel 'struct sk_buff':
struct __sk_buff {
    __u32 len;
    __u32 pkt_type;
    __u32 mark;
    __u32 queue_mapping;
};

bpf programs can do:

int bpf_prog(struct __sk_buff *skb)
{
    __u32 var = skb->pkt_type;

which will be compiled to bpf assembler as:

dst_reg = *(u32 *)(src_reg + 4) // 4 == offsetof(struct __sk_buff, pkt_type)

bpf verifier will check validity of access and will convert it to:

dst_reg = *(u8 *)(src_reg + offsetof(struct sk_buff, __pkt_type_offset))
dst_reg &= 7

since skb->pkt_type is a bitfield.

Signed-off-by: Alexei Starovoitov <ast@plumgrid.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2015-03-15 22:02:28 -04:00
..
Makefile ebpf: remove kernel test stubs 2015-03-01 14:05:18 -05:00
arraymap.c ebpf: constify various function pointer structs 2015-03-01 14:05:18 -05:00
core.c ebpf: add helper for obtaining current processor id 2015-03-15 21:57:25 -04:00
hashtab.c ebpf: constify various function pointer structs 2015-03-01 14:05:18 -05:00
helpers.c ebpf: add helper for obtaining current processor id 2015-03-15 21:57:25 -04:00
syscall.c bpf: allow extended BPF programs access skb fields 2015-03-15 22:02:28 -04:00
verifier.c bpf: allow extended BPF programs access skb fields 2015-03-15 22:02:28 -04:00