Message ID | 20240613213044.3675745-1-kuba@kernel.org (mailing list archive) |
---|---|
State | Accepted |
Commit | 7ed352d34f1a09a7659c53de07785115587499fe |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [net] netdev-genl: fix error codes when outputting XDP features | expand |
On 6/13/2024 2:30 PM, Jakub Kicinski wrote: > -EINVAL will interrupt the dump. The correct error to return > if we have more data to dump is -EMSGSIZE. > > Discovered by doing: > > for i in `seq 80`; do ip link add type veth; done > ./cli.py --dbg-small-recv 5300 --spec netdev.yaml --dump dev-get >> /dev/null > [...] > nl_len = 64 (48) nl_flags = 0x0 nl_type = 19 > nl_len = 20 (4) nl_flags = 0x2 nl_type = 3 > error: -22 > > Fixes: d3d854fd6a1d ("netdev-genl: create a simple family for netdev stuff") > Signed-off-by: Jakub Kicinski <kuba@kernel.org> LGTM. Reviewed-by: Amritha Nambiar <amritha.nambiar@intel.com> > --- > CC: hawk@kernel.org > CC: amritha.nambiar@intel.com > CC: sridhar.samudrala@intel.com > CC: alardam@gmail.com > CC: lorenzo@kernel.org > CC: memxor@gmail.com > --- > net/core/netdev-genl.c | 16 ++++++++-------- > 1 file changed, 8 insertions(+), 8 deletions(-) > > diff --git a/net/core/netdev-genl.c b/net/core/netdev-genl.c > index 1f6ae6379e0f..05f9515d2c05 100644 > --- a/net/core/netdev-genl.c > +++ b/net/core/netdev-genl.c > @@ -59,22 +59,22 @@ XDP_METADATA_KFUNC_xxx > nla_put_u64_64bit(rsp, NETDEV_A_DEV_XDP_RX_METADATA_FEATURES, > xdp_rx_meta, NETDEV_A_DEV_PAD) || > nla_put_u64_64bit(rsp, NETDEV_A_DEV_XSK_FEATURES, > - xsk_features, NETDEV_A_DEV_PAD)) { > - genlmsg_cancel(rsp, hdr); > - return -EINVAL; > - } > + xsk_features, NETDEV_A_DEV_PAD)) > + goto err_cancel_msg; > > if (netdev->xdp_features & NETDEV_XDP_ACT_XSK_ZEROCOPY) { > if (nla_put_u32(rsp, NETDEV_A_DEV_XDP_ZC_MAX_SEGS, > - netdev->xdp_zc_max_segs)) { > - genlmsg_cancel(rsp, hdr); > - return -EINVAL; > - } > + netdev->xdp_zc_max_segs)) > + goto err_cancel_msg; > } > > genlmsg_end(rsp, hdr); > > return 0; > + > +err_cancel_msg: > + genlmsg_cancel(rsp, hdr); > + return -EMSGSIZE; > } > > static void
On Fri, Jun 14, 2024 at 12:13 AM Nambiar, Amritha <amritha.nambiar@intel.com> wrote: > > On 6/13/2024 2:30 PM, Jakub Kicinski wrote: > > -EINVAL will interrupt the dump. The correct error to return > > if we have more data to dump is -EMSGSIZE. > > > > Discovered by doing: > > > > for i in `seq 80`; do ip link add type veth; done > > ./cli.py --dbg-small-recv 5300 --spec netdev.yaml --dump dev-get >> /dev/null > > [...] > > nl_len = 64 (48) nl_flags = 0x0 nl_type = 19 > > nl_len = 20 (4) nl_flags = 0x2 nl_type = 3 > > error: -22 > > > > Fixes: d3d854fd6a1d ("netdev-genl: create a simple family for netdev stuff") > > Signed-off-by: Jakub Kicinski <kuba@kernel.org> > > LGTM. > Reviewed-by: Amritha Nambiar <amritha.nambiar@intel.com> Reviewed-by: Eric Dumazet <edumazet@google.com>
Hello: This patch was applied to netdev/net.git (main) by Jakub Kicinski <kuba@kernel.org>: On Thu, 13 Jun 2024 14:30:44 -0700 you wrote: > -EINVAL will interrupt the dump. The correct error to return > if we have more data to dump is -EMSGSIZE. > > Discovered by doing: > > for i in `seq 80`; do ip link add type veth; done > ./cli.py --dbg-small-recv 5300 --spec netdev.yaml --dump dev-get >> /dev/null > [...] > nl_len = 64 (48) nl_flags = 0x0 nl_type = 19 > nl_len = 20 (4) nl_flags = 0x2 nl_type = 3 > error: -22 > > [...] Here is the summary with links: - [net] netdev-genl: fix error codes when outputting XDP features https://git.kernel.org/netdev/net/c/7ed352d34f1a You are awesome, thank you!
diff --git a/net/core/netdev-genl.c b/net/core/netdev-genl.c index 1f6ae6379e0f..05f9515d2c05 100644 --- a/net/core/netdev-genl.c +++ b/net/core/netdev-genl.c @@ -59,22 +59,22 @@ XDP_METADATA_KFUNC_xxx nla_put_u64_64bit(rsp, NETDEV_A_DEV_XDP_RX_METADATA_FEATURES, xdp_rx_meta, NETDEV_A_DEV_PAD) || nla_put_u64_64bit(rsp, NETDEV_A_DEV_XSK_FEATURES, - xsk_features, NETDEV_A_DEV_PAD)) { - genlmsg_cancel(rsp, hdr); - return -EINVAL; - } + xsk_features, NETDEV_A_DEV_PAD)) + goto err_cancel_msg; if (netdev->xdp_features & NETDEV_XDP_ACT_XSK_ZEROCOPY) { if (nla_put_u32(rsp, NETDEV_A_DEV_XDP_ZC_MAX_SEGS, - netdev->xdp_zc_max_segs)) { - genlmsg_cancel(rsp, hdr); - return -EINVAL; - } + netdev->xdp_zc_max_segs)) + goto err_cancel_msg; } genlmsg_end(rsp, hdr); return 0; + +err_cancel_msg: + genlmsg_cancel(rsp, hdr); + return -EMSGSIZE; } static void
-EINVAL will interrupt the dump. The correct error to return if we have more data to dump is -EMSGSIZE. Discovered by doing: for i in `seq 80`; do ip link add type veth; done ./cli.py --dbg-small-recv 5300 --spec netdev.yaml --dump dev-get >> /dev/null [...] nl_len = 64 (48) nl_flags = 0x0 nl_type = 19 nl_len = 20 (4) nl_flags = 0x2 nl_type = 3 error: -22 Fixes: d3d854fd6a1d ("netdev-genl: create a simple family for netdev stuff") Signed-off-by: Jakub Kicinski <kuba@kernel.org> --- CC: hawk@kernel.org CC: amritha.nambiar@intel.com CC: sridhar.samudrala@intel.com CC: alardam@gmail.com CC: lorenzo@kernel.org CC: memxor@gmail.com --- net/core/netdev-genl.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-)