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
>

Reply via email to