xdp: implement xdp_redirect_map for generic XDP
authorJesper Dangaard Brouer <brouer@redhat.com>
Sun, 10 Sep 2017 07:47:02 +0000 (09:47 +0200)
committerDavid S. Miller <davem@davemloft.net>
Mon, 11 Sep 2017 21:33:00 +0000 (14:33 -0700)
commit96c5508e3012ed0984ab93821d64ac1ff3279c09
tree89cbc7aab1d9bfad94ccf2b7eff028cc09b36220
parent609320c8a22715b74b39796930c3542719f8ab62
xdp: implement xdp_redirect_map for generic XDP

Using bpf_redirect_map is allowed for generic XDP programs, but the
appropriate map lookup was never performed in xdp_do_generic_redirect().

Instead the map-index is directly used as the ifindex.  For the
xdp_redirect_map sample in SKB-mode '-S', this resulted in trying
sending on ifindex 0 which isn't valid, resulting in getting SKB
packets dropped.  Thus, the reported performance numbers are wrong in
commit 24251c264798 ("samples/bpf: add option for native and skb mode
for redirect apps") for the 'xdp_redirect_map -S' case.

Before commit 109980b894e9 ("bpf: don't select potentially stale
ri->map from buggy xdp progs") it could crash the kernel.  Like this
commit also check that the map_owner owner is correct before
dereferencing the map pointer.  But make sure that this API misusage
can be caught by a tracepoint. Thus, allowing userspace via
tracepoints to detect misbehaving bpf_progs.

Fixes: 6103aa96ec07 ("net: implement XDP_REDIRECT for xdp generic")
Fixes: 24251c264798 ("samples/bpf: add option for native and skb mode for redirect apps")
Signed-off-by: Jesper Dangaard Brouer <brouer@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/trace/events/xdp.h
net/core/filter.c