2022-11-25 13:06:42

by wangyufen

[permalink] [raw]
Subject: [PATCH 2/2] RDMA/srp: Fix error return code in srp_parse_options()

In the previous while loop, "ret" may be assigned zero. Therefore,
"ret" needs to be assigned -EINVAL at the beginning of each loop.

Fixes: e711f968c49c ("IB/srp: replace custom implementation of hex2bin()")
Fixes: 2a174df0c602 ("IB/srp: Use kstrtoull() instead of simple_strtoull()")
Fixes: 19f313438c77 ("IB/srp: Add RDMA/CM support")
Signed-off-by: Wang Yufen <[email protected]>
---
drivers/infiniband/ulp/srp/ib_srp.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/drivers/infiniband/ulp/srp/ib_srp.c b/drivers/infiniband/ulp/srp/ib_srp.c
index 1075c2a..1bd3559 100644
--- a/drivers/infiniband/ulp/srp/ib_srp.c
+++ b/drivers/infiniband/ulp/srp/ib_srp.c
@@ -3352,6 +3352,7 @@ static int srp_parse_options(struct net *net, const char *buf,

sep_opt = options;
while ((p = strsep(&sep_opt, ",\n")) != NULL) {
+ ret = -EINVAL;
if (!*p)
continue;

--
1.8.3.1


2022-11-25 15:05:59

by Andy Shevchenko

[permalink] [raw]
Subject: Re: [PATCH 2/2] RDMA/srp: Fix error return code in srp_parse_options()

On Fri, Nov 25, 2022 at 08:03:51PM +0800, Wang Yufen wrote:
> In the previous while loop, "ret" may be assigned zero. Therefore,
> "ret" needs to be assigned -EINVAL at the beginning of each loop.

...

> while ((p = strsep(&sep_opt, ",\n")) != NULL) {
> + ret = -EINVAL;
> if (!*p)
> continue;

Better option is to investigate each case separately and gather all of them
into a single fix.

For example, this

case SRP_OPT_MAX_IT_IU_SIZE:
if (match_int(args, &token) || token < 0) {
pr_warn("bad maximum initiator to target IU size '%s'\n", p);
goto out;
}
target->max_it_iu_size = token;
break;

can be rewritten as

case SRP_OPT_MAX_IT_IU_SIZE:
ret = match_int(args, &token);
if (ret)
goto out;
if (token < 0) {
pr_warn("bad maximum initiator to target IU size '%s'\n", p);
ret = -EINVAL;
goto out;
}
target->max_it_iu_size = token;
break;

and so on...

--
With Best Regards,
Andy Shevchenko


2022-11-26 02:01:22

by wangyufen

[permalink] [raw]
Subject: Re: [PATCH 2/2] RDMA/srp: Fix error return code in srp_parse_options()



在 2022/11/25 22:37, Andy Shevchenko 写道:
> On Fri, Nov 25, 2022 at 08:03:51PM +0800, Wang Yufen wrote:
>> In the previous while loop, "ret" may be assigned zero. Therefore,
>> "ret" needs to be assigned -EINVAL at the beginning of each loop.
>
> ...
>
>> while ((p = strsep(&sep_opt, ",\n")) != NULL) {
>> + ret = -EINVAL;
>> if (!*p)
>> continue;
>
> Better option is to investigate each case separately and gather all of them
> into a single fix.
>
> For example, this
>
> case SRP_OPT_MAX_IT_IU_SIZE:
> if (match_int(args, &token) || token < 0) {
> pr_warn("bad maximum initiator to target IU size '%s'\n", p);
> goto out;
> }
> target->max_it_iu_size = token;
> break;
>
> can be rewritten as
>
> case SRP_OPT_MAX_IT_IU_SIZE:
> ret = match_int(args, &token);
> if (ret)
> goto out;
> if (token < 0) {
> pr_warn("bad maximum initiator to target IU size '%s'\n", p);
> ret = -EINVAL;
> goto out;
> }
> target->max_it_iu_size = token;
> break;
>
> and so on...
>
I got it. Will change in v2.
Thanks!