]> git.baikalelectronics.ru Git - kernel.git/commit
net: ipv4, ipv6: run cgroup eBPF egress programs
authorDaniel Mack <daniel@zonque.org>
Wed, 23 Nov 2016 15:52:29 +0000 (16:52 +0100)
committerDavid S. Miller <davem@davemloft.net>
Fri, 25 Nov 2016 21:26:04 +0000 (16:26 -0500)
commit3bca70e0fdd3991c29e5119aa3bfb6d307555045
tree2985be4f76a478cab89536ffd1efaaa0fddbb36f
parentf36eb5cfebe3076f08322be00a33f026ae3637eb
net: ipv4, ipv6: run cgroup eBPF egress programs

If the cgroup associated with the receiving socket has an eBPF
programs installed, run them from ip_output(), ip6_output() and
ip_mc_output(). From mentioned functions we have two socket contexts
as per 225a6ca953b8 ("netfilter: Pass socket pointer down through
okfn()."). We explicitly need to use sk instead of skb->sk here,
since otherwise the same program would run multiple times on egress
when encap devices are involved, which is not desired in our case.

eBPF programs used in this context are expected to either return 1 to
let the packet pass, or != 1 to drop them. The programs have access to
the skb through bpf_skb_load_bytes(), and the payload starts at the
network headers (L3).

Note that cgroup_bpf_run_filter() is stubbed out as static inline nop
for !CONFIG_CGROUP_BPF, and is otherwise guarded by a static key if
the feature is unused.

Signed-off-by: Daniel Mack <daniel@zonque.org>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/ipv4/ip_output.c
net/ipv6/ip6_output.c