Message ID | 20210517051010.1355-1-fw@strlen.de (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Stephen Hemminger |
Headers | show |
Series | [iproute2,v3] libgenl: make genl_add_mcast_grp set errno on error | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Not a local patch |
On 5/16/21 11:10 PM, Florian Westphal wrote: > genl_add_mcast_grp doesn't set errno in all cases. > > On kernels that support mptcp but lack event support (all kernels <= 5.11) > MPTCP_PM_EV_GRP_NAME won't be found and ip will exit with > > "can't subscribe to mptcp events: Success" > > Set errno to a meaningful value (ENOENT) when the group name isn't found > and also cover other spots where it returns nonzero with errno unset. > > Fixes: ff619e4fd370 ("mptcp: add support for event monitoring") > Signed-off-by: Florian Westphal <fw@strlen.de> > --- > Change since v2: include errno.h > Change since v1: fix libgenl instead of setting errno in the caller. > lib/libgenl.c | 11 +++++++++-- > 1 file changed, 9 insertions(+), 2 deletions(-) > Reviewed-by: David Ahern <dsahern@kernel.org> It is assigned to Stephen for main branch.
diff --git a/lib/libgenl.c b/lib/libgenl.c index 4c51d47af46b..fca07f9fe768 100644 --- a/lib/libgenl.c +++ b/lib/libgenl.c @@ -3,6 +3,7 @@ * libgenl.c GENL library */ +#include <errno.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> @@ -84,6 +85,7 @@ static int genl_parse_grps(struct rtattr *attr, const char *name, unsigned int * } } + errno = ENOENT; return -1; } @@ -108,17 +110,22 @@ int genl_add_mcast_grp(struct rtnl_handle *grth, __u16 fnum, const char *group) ghdr = NLMSG_DATA(answer); len = answer->nlmsg_len; - if (answer->nlmsg_type != GENL_ID_CTRL) + if (answer->nlmsg_type != GENL_ID_CTRL) { + errno = EINVAL; goto err_free; + } len -= NLMSG_LENGTH(GENL_HDRLEN); - if (len < 0) + if (len < 0) { + errno = EINVAL; goto err_free; + } attrs = (struct rtattr *) ((char *) ghdr + GENL_HDRLEN); parse_rtattr(tb, CTRL_ATTR_MAX, attrs, len); if (tb[CTRL_ATTR_MCAST_GROUPS] == NULL) { + errno = ENOENT; fprintf(stderr, "Missing mcast groups TLV\n"); goto err_free; }
genl_add_mcast_grp doesn't set errno in all cases. On kernels that support mptcp but lack event support (all kernels <= 5.11) MPTCP_PM_EV_GRP_NAME won't be found and ip will exit with "can't subscribe to mptcp events: Success" Set errno to a meaningful value (ENOENT) when the group name isn't found and also cover other spots where it returns nonzero with errno unset. Fixes: ff619e4fd370 ("mptcp: add support for event monitoring") Signed-off-by: Florian Westphal <fw@strlen.de> --- Change since v2: include errno.h Change since v1: fix libgenl instead of setting errno in the caller. lib/libgenl.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)