On Sat, Oct 5, 2019 at 2:09 PM Jiri Pirko <j...@resnulli.us> wrote: > > From: Jiri Pirko <j...@mellanox.com> > > Benefit from the fact that the generic netlink code can parse the attrs > for dumpit op and avoid need to parse it in the op callback. > > Signed-off-by: Jiri Pirko <j...@mellanox.com> > --- > net/tipc/netlink.c | 9 ++++++--- > net/tipc/node.c | 6 +----- > net/tipc/socket.c | 6 +----- > net/tipc/udp_media.c | 6 +----- > 4 files changed, 9 insertions(+), 18 deletions(-) > > diff --git a/net/tipc/netlink.c b/net/tipc/netlink.c > index d6165ad384c0..5f5df232d72b 100644 > --- a/net/tipc/netlink.c > +++ b/net/tipc/netlink.c > @@ -176,7 +176,8 @@ static const struct genl_ops tipc_genl_v2_ops[] = { > }, > { > .cmd = TIPC_NL_PUBL_GET, > - .validate = GENL_DONT_VALIDATE_STRICT | > GENL_DONT_VALIDATE_DUMP, > + .validate = GENL_DONT_VALIDATE_STRICT | > + GENL_DONT_VALIDATE_DUMP_STRICT, > .dumpit = tipc_nl_publ_dump, > }, > { > @@ -239,7 +240,8 @@ static const struct genl_ops tipc_genl_v2_ops[] = { > }, > { > .cmd = TIPC_NL_MON_PEER_GET, > - .validate = GENL_DONT_VALIDATE_STRICT | > GENL_DONT_VALIDATE_DUMP, > + .validate = GENL_DONT_VALIDATE_STRICT | > + GENL_DONT_VALIDATE_DUMP_STRICT, > .dumpit = tipc_nl_node_dump_monitor_peer, > }, > { > @@ -250,7 +252,8 @@ static const struct genl_ops tipc_genl_v2_ops[] = { > #ifdef CONFIG_TIPC_MEDIA_UDP > { > .cmd = TIPC_NL_UDP_GET_REMOTEIP, > - .validate = GENL_DONT_VALIDATE_STRICT | > GENL_DONT_VALIDATE_DUMP, > + .validate = GENL_DONT_VALIDATE_STRICT | > + GENL_DONT_VALIDATE_DUMP_STRICT, > .dumpit = tipc_udp_nl_dump_remoteip, > }, Hi Jiri,
can I ask you why GENL_DONT_VALIDATE_DUMP_STRICT flag is needed when using genl_dumpit_info(cb)->attrs in dumpit? Thanks. > #endif > diff --git a/net/tipc/node.c b/net/tipc/node.c > index c8f6177dd5a2..f2e3cf70c922 100644 > --- a/net/tipc/node.c > +++ b/net/tipc/node.c > @@ -2484,13 +2484,9 @@ int tipc_nl_node_dump_monitor_peer(struct sk_buff *skb, > int err; > > if (!prev_node) { > - struct nlattr **attrs; > + struct nlattr **attrs = genl_dumpit_info(cb)->attrs; > struct nlattr *mon[TIPC_NLA_MON_MAX + 1]; > > - err = tipc_nlmsg_parse(cb->nlh, &attrs); > - if (err) > - return err; > - > if (!attrs[TIPC_NLA_MON]) > return -EINVAL; > > diff --git a/net/tipc/socket.c b/net/tipc/socket.c > index 3b9f8cc328f5..d579b64705b1 100644 > --- a/net/tipc/socket.c > +++ b/net/tipc/socket.c > @@ -3588,13 +3588,9 @@ int tipc_nl_publ_dump(struct sk_buff *skb, struct > netlink_callback *cb) > struct tipc_sock *tsk; > > if (!tsk_portid) { > - struct nlattr **attrs; > + struct nlattr **attrs = genl_dumpit_info(cb)->attrs; > struct nlattr *sock[TIPC_NLA_SOCK_MAX + 1]; > > - err = tipc_nlmsg_parse(cb->nlh, &attrs); > - if (err) > - return err; > - > if (!attrs[TIPC_NLA_SOCK]) > return -EINVAL; > > diff --git a/net/tipc/udp_media.c b/net/tipc/udp_media.c > index 287df68721df..43ca5fd6574d 100644 > --- a/net/tipc/udp_media.c > +++ b/net/tipc/udp_media.c > @@ -448,15 +448,11 @@ int tipc_udp_nl_dump_remoteip(struct sk_buff *skb, > struct netlink_callback *cb) > int i; > > if (!bid && !skip_cnt) { > + struct nlattr **attrs = genl_dumpit_info(cb)->attrs; > struct net *net = sock_net(skb->sk); > struct nlattr *battrs[TIPC_NLA_BEARER_MAX + 1]; > - struct nlattr **attrs; > char *bname; > > - err = tipc_nlmsg_parse(cb->nlh, &attrs); > - if (err) > - return err; > - > if (!attrs[TIPC_NLA_BEARER]) > return -EINVAL; > > -- > 2.21.0 >