Re: [PATCH net 05/10] net: xdp: don't allow device-bound programs in driver mode
Hi Jakub, On 11/20/2017 11:02 PM, Jakub Kicinski wrote: > On Mon, 20 Nov 2017 07:36:39 -0700, David Ahern wrote: >> On 11/19/17 9:55 PM, Jakub Kicinski wrote: >>> diff --git a/net/core/dev.c b/net/core/dev.c >>> index 09525a27319c..21de2d37a0ba 100644 >>> --- a/net/core/dev.c >>> +++ b/net/core/dev.c >>> @@ -7143,6 +7143,13 @@ int dev_change_xdp_fd(struct net_device *dev, struct >>> netlink_ext_ack *extack, >>> bpf_op == ops->ndo_bpf); >>> if (IS_ERR(prog)) >>> return PTR_ERR(prog); >>> + >>> + if (!(flags & XDP_FLAGS_HW_MODE) && >>> + bpf_prog_is_dev_bound(prog->aux)) { >>> + NL_SET_ERR_MSG_MOD(extack, "using device-bound program >>> without HW_MODE flag not supported"); >> >> I don't see dev_change_xdp_fd called by device drivers, so that should >> just be NL_SET_ERR_MSG. Also, "is not supported" sounds better to me >> than just "not supported". > > Thanks, I'll give others a couple more hours and respin! The rest of the series looks good to me, please respin with the minor changes requested. Thanks, Daniel
Re: [PATCH net 05/10] net: xdp: don't allow device-bound programs in driver mode
On Mon, 20 Nov 2017 07:36:39 -0700, David Ahern wrote: > On 11/19/17 9:55 PM, Jakub Kicinski wrote: > > diff --git a/net/core/dev.c b/net/core/dev.c > > index 09525a27319c..21de2d37a0ba 100644 > > --- a/net/core/dev.c > > +++ b/net/core/dev.c > > @@ -7143,6 +7143,13 @@ int dev_change_xdp_fd(struct net_device *dev, struct > > netlink_ext_ack *extack, > > bpf_op == ops->ndo_bpf); > > if (IS_ERR(prog)) > > return PTR_ERR(prog); > > + > > + if (!(flags & XDP_FLAGS_HW_MODE) && > > + bpf_prog_is_dev_bound(prog->aux)) { > > + NL_SET_ERR_MSG_MOD(extack, "using device-bound program > > without HW_MODE flag not supported"); > > I don't see dev_change_xdp_fd called by device drivers, so that should > just be NL_SET_ERR_MSG. Also, "is not supported" sounds better to me > than just "not supported". Thanks, I'll give others a couple more hours and respin!
Re: [PATCH net 05/10] net: xdp: don't allow device-bound programs in driver mode
On 11/19/17 9:55 PM, Jakub Kicinski wrote: > diff --git a/net/core/dev.c b/net/core/dev.c > index 09525a27319c..21de2d37a0ba 100644 > --- a/net/core/dev.c > +++ b/net/core/dev.c > @@ -7143,6 +7143,13 @@ int dev_change_xdp_fd(struct net_device *dev, struct > netlink_ext_ack *extack, >bpf_op == ops->ndo_bpf); > if (IS_ERR(prog)) > return PTR_ERR(prog); > + > + if (!(flags & XDP_FLAGS_HW_MODE) && > + bpf_prog_is_dev_bound(prog->aux)) { > + NL_SET_ERR_MSG_MOD(extack, "using device-bound program > without HW_MODE flag not supported"); I don't see dev_change_xdp_fd called by device drivers, so that should just be NL_SET_ERR_MSG. Also, "is not supported" sounds better to me than just "not supported".
[PATCH net 05/10] net: xdp: don't allow device-bound programs in driver mode
Currently device-bound programs are not able to run on the host to save resources (host JIT is not invoked). Don't allow XDP programs to be attached without the HW_MODE flag. In theory if program is already translated for device offload the driver should choose to offload it instead of loading it in the driver. However, offloading translated program may still fail resulting in device-bound program being run on the host. Prevent this by refusing to attach device bound programs if XDP_FLAGS_HW_MODE is not set. Signed-off-by: Jakub Kicinski Reviewed-by: Quentin Monnet Acked-by: Alexei Starovoitov Acked-by: Daniel Borkmann --- net/core/dev.c | 7 +++ 1 file changed, 7 insertions(+) diff --git a/net/core/dev.c b/net/core/dev.c index 09525a27319c..21de2d37a0ba 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -7143,6 +7143,13 @@ int dev_change_xdp_fd(struct net_device *dev, struct netlink_ext_ack *extack, bpf_op == ops->ndo_bpf); if (IS_ERR(prog)) return PTR_ERR(prog); + + if (!(flags & XDP_FLAGS_HW_MODE) && + bpf_prog_is_dev_bound(prog->aux)) { + NL_SET_ERR_MSG_MOD(extack, "using device-bound program without HW_MODE flag not supported"); + bpf_prog_put(prog); + return -EINVAL; + } } err = dev_xdp_install(dev, bpf_op, extack, flags, prog); -- 2.14.1