]> git.baikalelectronics.ru Git - kernel.git/commit
xdp: Remove the xdp_attachment_flags_ok() callback
authorToke Høiland-Jørgensen <toke@redhat.com>
Wed, 9 Dec 2020 13:57:37 +0000 (14:57 +0100)
committerDaniel Borkmann <daniel@iogearbox.net>
Wed, 9 Dec 2020 15:27:42 +0000 (16:27 +0100)
commitc30ed0d8b3e5e134584d45bf9a6f47ef650ed12b
tree19a3b9936dfd86b40bac58d449d625d5e3c5e688
parent1214bb4a0d392e14c518b32af2e627f5eb7cbccf
xdp: Remove the xdp_attachment_flags_ok() callback

Since commit 29d3f0c0214f ("bpf, xdp: Maintain info on attached XDP BPF
programs in net_device"), the XDP program attachment info is now maintained
in the core code. This interacts badly with the xdp_attachment_flags_ok()
check that prevents unloading an XDP program with different load flags than
it was loaded with. In practice, two kinds of failures are seen:

- An XDP program loaded without specifying a mode (and which then ends up
  in driver mode) cannot be unloaded if the program mode is specified on
  unload.

- The dev_xdp_uninstall() hook always calls the driver callback with the
  mode set to the type of the program but an empty flags argument, which
  means the flags_ok() check prevents the program from being removed,
  leading to bpf prog reference leaks.

The original reason this check was added was to avoid ambiguity when
multiple programs were loaded. With the way the checks are done in the core
now, this is quite simple to enforce in the core code, so let's add a check
there and get rid of the xdp_attachment_flags_ok() callback entirely.

Fixes: 29d3f0c0214f ("bpf, xdp: Maintain info on attached XDP BPF programs in net_device")
Signed-off-by: Toke Høiland-Jørgensen <toke@redhat.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Jakub Kicinski <kuba@kernel.org>
Link: https://lore.kernel.org/bpf/160752225751.110217.10267659521308669050.stgit@toke.dk
drivers/net/ethernet/netronome/nfp/nfp_net_common.c
drivers/net/ethernet/ti/cpsw_priv.c
drivers/net/netdevsim/bpf.c
include/net/xdp.h
net/core/dev.c
net/core/xdp.c