On Sat, Oct 5, 2019 at 2:09 PM Jiri Pirko <[email protected]> wrote:
>
> From: Jiri Pirko <[email protected]>
>
> 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 <[email protected]>
> ---
> 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
>