2023-12-30 05:20:33

by Lin Ma

[permalink] [raw]
Subject: [PATCH v1] RDMA/sa_query: use validate not parser in ib_nl_is_good_resolve_resp

The attributes array `tb` in ib_nl_is_good_resolve_resp is never used
after the parsing. Therefore use nla_validate_deprecated function here
for improvement.

Signed-off-by: Lin Ma <[email protected]>
---
drivers/infiniband/core/sa_query.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/drivers/infiniband/core/sa_query.c b/drivers/infiniband/core/sa_query.c
index 8175dde60b0a..c7407a53fcda 100644
--- a/drivers/infiniband/core/sa_query.c
+++ b/drivers/infiniband/core/sa_query.c
@@ -1047,14 +1047,13 @@ int ib_nl_handle_set_timeout(struct sk_buff *skb,

static inline int ib_nl_is_good_resolve_resp(const struct nlmsghdr *nlh)
{
- struct nlattr *tb[LS_NLA_TYPE_MAX];
int ret;

if (nlh->nlmsg_flags & RDMA_NL_LS_F_ERR)
return 0;

- ret = nla_parse_deprecated(tb, LS_NLA_TYPE_MAX - 1, nlmsg_data(nlh),
- nlmsg_len(nlh), ib_nl_policy, NULL);
+ ret = nla_validate_deprecated(nlmsg_data(nlh), nlmsg_len(nlh),
+ LS_NLA_TYPE_MAX - 1, ib_nl_policy, NULL);
if (ret)
return 0;

--
2.17.1



2023-12-30 15:44:38

by Leon Romanovsky

[permalink] [raw]
Subject: Re: [PATCH v1] RDMA/sa_query: use validate not parser in ib_nl_is_good_resolve_resp

On Sat, Dec 30, 2023 at 01:19:56PM +0800, Lin Ma wrote:
> The attributes array `tb` in ib_nl_is_good_resolve_resp is never used
> after the parsing. Therefore use nla_validate_deprecated function here
> for improvement.

What did this change improve?

>
> Signed-off-by: Lin Ma <[email protected]>
> ---
> drivers/infiniband/core/sa_query.c | 5 ++---
> 1 file changed, 2 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/infiniband/core/sa_query.c b/drivers/infiniband/core/sa_query.c
> index 8175dde60b0a..c7407a53fcda 100644
> --- a/drivers/infiniband/core/sa_query.c
> +++ b/drivers/infiniband/core/sa_query.c
> @@ -1047,14 +1047,13 @@ int ib_nl_handle_set_timeout(struct sk_buff *skb,
>
> static inline int ib_nl_is_good_resolve_resp(const struct nlmsghdr *nlh)
> {
> - struct nlattr *tb[LS_NLA_TYPE_MAX];
> int ret;
>
> if (nlh->nlmsg_flags & RDMA_NL_LS_F_ERR)
> return 0;
>
> - ret = nla_parse_deprecated(tb, LS_NLA_TYPE_MAX - 1, nlmsg_data(nlh),
> - nlmsg_len(nlh), ib_nl_policy, NULL);
> + ret = nla_validate_deprecated(nlmsg_data(nlh), nlmsg_len(nlh),
> + LS_NLA_TYPE_MAX - 1, ib_nl_policy, NULL);
> if (ret)
> return 0;
>
> --
> 2.17.1
>

2023-12-31 05:28:31

by Lin Ma

[permalink] [raw]
Subject: Re: [PATCH v1] RDMA/sa_query: use validate not parser in ib_nl_is_good_resolve_resp

Hello Leon,

> > The attributes array `tb` in ib_nl_is_good_resolve_resp is never used
> > after the parsing. Therefore use nla_validate_deprecated function here
> > for improvement.
>
> What did this change improve?
>

To my concern, the nla_validate_deprecated, compared to nla_parse_deprecated,
will at lease save a memset in function nla_parse_deprecated

```
if (tb)
memset(tb, 0, sizeof(struct nlattr *) * (maxtype + 1));
```

Morever, because the `nla_validate_deprecated` just validate the attributes
array and will not try to retrieve the nla pointers. It shall be faster
and cleaner here :D.

Regards
Lin

2023-12-31 15:49:17

by Leon Romanovsky

[permalink] [raw]
Subject: Re: [PATCH v1] RDMA/sa_query: use validate not parser in ib_nl_is_good_resolve_resp

On Sun, Dec 31, 2023 at 01:27:59PM +0800, Lin Ma wrote:
> Hello Leon,
>
> > > The attributes array `tb` in ib_nl_is_good_resolve_resp is never used
> > > after the parsing. Therefore use nla_validate_deprecated function here
> > > for improvement.
> >
> > What did this change improve?
> >
>
> To my concern, the nla_validate_deprecated, compared to nla_parse_deprecated,
> will at lease save a memset in function nla_parse_deprecated
>
> ```
> if (tb)
> memset(tb, 0, sizeof(struct nlattr *) * (maxtype + 1));
> ```
>
> Morever, because the `nla_validate_deprecated` just validate the attributes
> array and will not try to retrieve the nla pointers. It shall be faster
> and cleaner here :D.

We don't care about speed in this path.
Let's leave the code as is.

Thanks

>
> Regards
> Lin