Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> writes: > This lifts the restriction on running devmap BPF progs in generic > redirect mode. To match native XDP behavior, it is invoked right before > generic_xdp_tx is called, and only supports XDP_PASS/XDP_ABORTED/ > XDP_DROP actions. > > We also return 0 even if devmap program drops the packet, as > semantically redirect has already succeeded and the devmap prog is the > last point before TX of the packet to device where it can deliver a > verdict on the packet. > > This also means it must take care of freeing the skb, as > xdp_do_generic_redirect callers only do that in case an error is > returned. > > Signed-off-by: Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> > --- > kernel/bpf/devmap.c | 42 +++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 41 insertions(+), 1 deletion(-) > > diff --git a/kernel/bpf/devmap.c b/kernel/bpf/devmap.c > index 2a75e6c2d27d..db3ed8b20c8c 100644 > --- a/kernel/bpf/devmap.c > +++ b/kernel/bpf/devmap.c > @@ -322,7 +322,8 @@ bool dev_map_can_have_prog(struct bpf_map *map) > { > if ((map->map_type == BPF_MAP_TYPE_DEVMAP || > map->map_type == BPF_MAP_TYPE_DEVMAP_HASH) && > - map->value_size != offsetofend(struct bpf_devmap_val, ifindex)) > + map->value_size != offsetofend(struct bpf_devmap_val, ifindex) && > + map->value_size != offsetofend(struct bpf_devmap_val, bpf_prog.fd)) > return true; With this you've basically removed the need for the check that calls this, so why not just get rid of it entirely? Same thing for cpumap, instead of updating cpu_map_prog_allowed(), just get rid of it... -Toke