Message ID | 20200412133204.43847-1-dsahern@kernel.org |
---|---|
State | Accepted |
Delegated to: | BPF Maintainers |
Headers | show |
Series | [bpf] xdp: Reset prog in dev_change_xdp_fd when fd is negative | expand |
On Sun, 12 Apr 2020 07:32:04 -0600 David Ahern wrote: > From: David Ahern <dsahern@gmail.com> > > 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 <dsahern@gmail.com> > Cc: Toke Høiland-Jørgensen <toke@redhat.com> Reviewed-by: Jakub Kicinski <kuba@kernel.org>
On Sun, Apr 12, 2020 at 07:32:04AM -0600, David Ahern wrote: > From: David Ahern <dsahern@gmail.com> > > 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 <dsahern@gmail.com> > Cc: Toke Høiland-Jørgensen <toke@redhat.com> Argh. Thanks for the fix. Toke, please review.
David Ahern <dsahern@kernel.org> writes: > From: David Ahern <dsahern@gmail.com> > > 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 <dsahern@gmail.com> > Cc: Toke Høiland-Jørgensen <toke@redhat.com> Ugh, my bad (obviously!). Thanks for the fix! I'll send an update to the selftest to catch errors like this... Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com>
On 4/14/20 9:17 AM, Toke Høiland-Jørgensen wrote: > David Ahern <dsahern@kernel.org> writes: > >> From: David Ahern <dsahern@gmail.com> >> >> 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 <dsahern@gmail.com> >> Cc: Toke Høiland-Jørgensen <toke@redhat.com> > > Ugh, my bad (obviously!). Thanks for the fix! I'll send an update to the > selftest to catch errors like this... +1 > Reviewed-by: Toke Høiland-Jørgensen <toke@redhat.com> Applied, thanks!
diff --git a/net/core/dev.c b/net/core/dev.c index df8097b8e286..522288177bbd 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);