From: David Ahern Date: Sun, 12 Apr 2020 13:32:04 +0000 (-0600) Subject: xdp: Reset prog in dev_change_xdp_fd when fd is negative X-Git-Tag: v5.10.7~2790^2~11^2~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=dfa74909cb6b846cbdabfc2c3c7de1d507fca075;p=platform%2Fkernel%2Flinux-rpi.git xdp: Reset prog in dev_change_xdp_fd when fd is negative The commit mentioned in the Fixes tag reuses the local prog variable when looking up an expected_fd. The variable is not reset when fd < 0 causing a detach with the expected_fd set to actually call dev_xdp_install for the existing program. The end result is that the detach does not happen. Fixes: 92234c8f15c8 ("xdp: Support specifying expected existing program when attaching XDP") Signed-off-by: David Ahern Signed-off-by: Daniel Borkmann Reviewed-by: Jakub Kicinski Reviewed-by: Toke Høiland-Jørgensen Link: https://lore.kernel.org/bpf/20200412133204.43847-1-dsahern@kernel.org --- diff --git a/net/core/dev.c b/net/core/dev.c index df8097b..5222881 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -8667,8 +8667,8 @@ int dev_change_xdp_fd(struct net_device *dev, struct netlink_ext_ack *extack, const struct net_device_ops *ops = dev->netdev_ops; enum bpf_netdev_command query; u32 prog_id, expected_id = 0; - struct bpf_prog *prog = NULL; bpf_op_t bpf_op, bpf_chk; + struct bpf_prog *prog; bool offload; int err; @@ -8734,6 +8734,7 @@ int dev_change_xdp_fd(struct net_device *dev, struct netlink_ext_ack *extack, } else { if (!prog_id) return 0; + prog = NULL; } err = dev_xdp_install(dev, bpf_op, extack, flags, prog);