2020-04-03 15:03:30

by Guenter Roeck

[permalink] [raw]
Subject: [PATCH] Bluetooth: Simplify / fix return values from tk_request

Some static checker run by 0day reports a variableScope warning.

net/bluetooth/smp.c:870:6: warning:
The scope of the variable 'err' can be reduced. [variableScope]

There is no need for two separate variables holding return values.
Stick with the existing variable. While at it, don't pre-initialize
'ret' because it is set in each code path.

tk_request() is supposed to return a negative error code on errors,
not a bluetooth return code. The calling code converts the return
value to SMP_UNSPECIFIED if needed.

Fixes: 92516cd97fd4 ("Bluetooth: Always request for user confirmation for Just Works")
Cc: Sonny Sasaka <[email protected]>
Signed-off-by: Guenter Roeck <[email protected]>
---
net/bluetooth/smp.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
index d0b695ee49f6..30e8626dd553 100644
--- a/net/bluetooth/smp.c
+++ b/net/bluetooth/smp.c
@@ -854,8 +854,7 @@ static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
struct l2cap_chan *chan = conn->smp;
struct smp_chan *smp = chan->data;
u32 passkey = 0;
- int ret = 0;
- int err;
+ int ret;

/* Initialize key for JUST WORKS */
memset(smp->tk, 0, sizeof(smp->tk));
@@ -887,12 +886,12 @@ static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
/* If Just Works, Continue with Zero TK and ask user-space for
* confirmation */
if (smp->method == JUST_WORKS) {
- err = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
+ ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
hcon->type,
hcon->dst_type,
passkey, 1);
- if (err)
- return SMP_UNSPECIFIED;
+ if (ret)
+ return ret;
set_bit(SMP_FLAG_WAIT_USER, &smp->flags);
return 0;
}
--
2.17.1


2020-04-03 16:43:20

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Simplify / fix return values from tk_request

On 4/3/20 8:13 AM, Alain Michaud wrote:
> Hi Guenter/Marcel,
>
>
> On Fri, Apr 3, 2020 at 11:03 AM Guenter Roeck <[email protected]> wrote:
>>
>> Some static checker run by 0day reports a variableScope warning.
>>
>> net/bluetooth/smp.c:870:6: warning:
>> The scope of the variable 'err' can be reduced. [variableScope]
>>
>> There is no need for two separate variables holding return values.
>> Stick with the existing variable. While at it, don't pre-initialize
>> 'ret' because it is set in each code path.
>>
>> tk_request() is supposed to return a negative error code on errors,
>> not a bluetooth return code. The calling code converts the return
>> value to SMP_UNSPECIFIED if needed.
>>
>> Fixes: 92516cd97fd4 ("Bluetooth: Always request for user confirmation for Just Works")
>> Cc: Sonny Sasaka <[email protected]>
>> Signed-off-by: Guenter Roeck <[email protected]>
>> ---
>> net/bluetooth/smp.c | 9 ++++-----
>> 1 file changed, 4 insertions(+), 5 deletions(-)
>>
>> diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
>> index d0b695ee49f6..30e8626dd553 100644
>> --- a/net/bluetooth/smp.c
>> +++ b/net/bluetooth/smp.c
>> @@ -854,8 +854,7 @@ static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
>> struct l2cap_chan *chan = conn->smp;
>> struct smp_chan *smp = chan->data;
>> u32 passkey = 0;
>> - int ret = 0;
>> - int err;
>> + int ret;
>>
>> /* Initialize key for JUST WORKS */
>> memset(smp->tk, 0, sizeof(smp->tk));
>> @@ -887,12 +886,12 @@ static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
>> /* If Just Works, Continue with Zero TK and ask user-space for
>> * confirmation */
>> if (smp->method == JUST_WORKS) {
>> - err = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
>> + ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
>> hcon->type,
>> hcon->dst_type,
>> passkey, 1);
>> - if (err)
>> - return SMP_UNSPECIFIED;
>> + if (ret)
>> + return ret;
> I think there may be some miss match between expected types of error
> codes here. The SMP error code type seems to be expected throughout
> this code base, so this change would propagate a potential negative
> value while the rest of the SMP protocol expects strictly positive
> error codes.
>

Up to the patch introducing the SMP_UNSPECIFIED return value, tk_request()
returned negative error codes, and all callers convert it to SMP_UNSPECIFIED.

If tk_request() is supposed to return SMP_UNSPECIFIED on error, it should
be returned consistently, and its callers don't have to convert it again.

Guenter

>> set_bit(SMP_FLAG_WAIT_USER, &smp->flags);
>> return 0;
>> }
>> --
>> 2.17.1
>>
>
> Thanks,
> Alain
>

2020-04-03 16:58:40

by Alain Michaud

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Simplify / fix return values from tk_request

On Fri, Apr 3, 2020 at 12:43 PM Guenter Roeck <[email protected]> wrote:
>
> On 4/3/20 8:13 AM, Alain Michaud wrote:
> > Hi Guenter/Marcel,
> >
> >
> > On Fri, Apr 3, 2020 at 11:03 AM Guenter Roeck <[email protected]> wrote:
> >>
> >> Some static checker run by 0day reports a variableScope warning.
> >>
> >> net/bluetooth/smp.c:870:6: warning:
> >> The scope of the variable 'err' can be reduced. [variableScope]
> >>
> >> There is no need for two separate variables holding return values.
> >> Stick with the existing variable. While at it, don't pre-initialize
> >> 'ret' because it is set in each code path.
> >>
> >> tk_request() is supposed to return a negative error code on errors,
> >> not a bluetooth return code. The calling code converts the return
> >> value to SMP_UNSPECIFIED if needed.
> >>
> >> Fixes: 92516cd97fd4 ("Bluetooth: Always request for user confirmation for Just Works")
> >> Cc: Sonny Sasaka <[email protected]>
> >> Signed-off-by: Guenter Roeck <[email protected]>
> >> ---
> >> net/bluetooth/smp.c | 9 ++++-----
> >> 1 file changed, 4 insertions(+), 5 deletions(-)
> >>
> >> diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
> >> index d0b695ee49f6..30e8626dd553 100644
> >> --- a/net/bluetooth/smp.c
> >> +++ b/net/bluetooth/smp.c
> >> @@ -854,8 +854,7 @@ static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
> >> struct l2cap_chan *chan = conn->smp;
> >> struct smp_chan *smp = chan->data;
> >> u32 passkey = 0;
> >> - int ret = 0;
> >> - int err;
> >> + int ret;
> >>
> >> /* Initialize key for JUST WORKS */
> >> memset(smp->tk, 0, sizeof(smp->tk));
> >> @@ -887,12 +886,12 @@ static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
> >> /* If Just Works, Continue with Zero TK and ask user-space for
> >> * confirmation */
> >> if (smp->method == JUST_WORKS) {
> >> - err = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
> >> + ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
> >> hcon->type,
> >> hcon->dst_type,
> >> passkey, 1);
> >> - if (err)
> >> - return SMP_UNSPECIFIED;
> >> + if (ret)
> >> + return ret;
> > I think there may be some miss match between expected types of error
> > codes here. The SMP error code type seems to be expected throughout
> > this code base, so this change would propagate a potential negative
> > value while the rest of the SMP protocol expects strictly positive
> > error codes.
> >
>
> Up to the patch introducing the SMP_UNSPECIFIED return value, tk_request()
> returned negative error codes, and all callers convert it to SMP_UNSPECIFIED.
>
> If tk_request() is supposed to return SMP_UNSPECIFIED on error, it should
> be returned consistently, and its callers don't have to convert it again.
Agreed, the conventions aren't clear here. I'll differ to Marcel to
provide guidance in this case where as a long term solution might
increase the scope of this patch beyond what would be reasonable.
>
> Guenter
>
> >> set_bit(SMP_FLAG_WAIT_USER, &smp->flags);
> >> return 0;
> >> }
> >> --
> >> 2.17.1
> >>
> >
> > Thanks,
> > Alain
> >
>

2020-04-04 00:40:41

by Sonny Sasaka

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Simplify / fix return values from tk_request

The patch looks good to me. Agreed with Guenter's assessment, I made a
mistake in the original patch by not being consistent with the
function contract.

On Fri, Apr 3, 2020 at 9:57 AM Alain Michaud <[email protected]> wrote:
>
> On Fri, Apr 3, 2020 at 12:43 PM Guenter Roeck <[email protected]> wrote:
> >
> > On 4/3/20 8:13 AM, Alain Michaud wrote:
> > > Hi Guenter/Marcel,
> > >
> > >
> > > On Fri, Apr 3, 2020 at 11:03 AM Guenter Roeck <[email protected]> wrote:
> > >>
> > >> Some static checker run by 0day reports a variableScope warning.
> > >>
> > >> net/bluetooth/smp.c:870:6: warning:
> > >> The scope of the variable 'err' can be reduced. [variableScope]
> > >>
> > >> There is no need for two separate variables holding return values.
> > >> Stick with the existing variable. While at it, don't pre-initialize
> > >> 'ret' because it is set in each code path.
> > >>
> > >> tk_request() is supposed to return a negative error code on errors,
> > >> not a bluetooth return code. The calling code converts the return
> > >> value to SMP_UNSPECIFIED if needed.
> > >>
> > >> Fixes: 92516cd97fd4 ("Bluetooth: Always request for user confirmation for Just Works")
> > >> Cc: Sonny Sasaka <[email protected]>
> > >> Signed-off-by: Guenter Roeck <[email protected]>
> > >> ---
> > >> net/bluetooth/smp.c | 9 ++++-----
> > >> 1 file changed, 4 insertions(+), 5 deletions(-)
> > >>
> > >> diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
> > >> index d0b695ee49f6..30e8626dd553 100644
> > >> --- a/net/bluetooth/smp.c
> > >> +++ b/net/bluetooth/smp.c
> > >> @@ -854,8 +854,7 @@ static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
> > >> struct l2cap_chan *chan = conn->smp;
> > >> struct smp_chan *smp = chan->data;
> > >> u32 passkey = 0;
> > >> - int ret = 0;
> > >> - int err;
> > >> + int ret;
> > >>
> > >> /* Initialize key for JUST WORKS */
> > >> memset(smp->tk, 0, sizeof(smp->tk));
> > >> @@ -887,12 +886,12 @@ static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
> > >> /* If Just Works, Continue with Zero TK and ask user-space for
> > >> * confirmation */
> > >> if (smp->method == JUST_WORKS) {
> > >> - err = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
> > >> + ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
> > >> hcon->type,
> > >> hcon->dst_type,
> > >> passkey, 1);
> > >> - if (err)
> > >> - return SMP_UNSPECIFIED;
> > >> + if (ret)
> > >> + return ret;
> > > I think there may be some miss match between expected types of error
> > > codes here. The SMP error code type seems to be expected throughout
> > > this code base, so this change would propagate a potential negative
> > > value while the rest of the SMP protocol expects strictly positive
> > > error codes.
> > >
> >
> > Up to the patch introducing the SMP_UNSPECIFIED return value, tk_request()
> > returned negative error codes, and all callers convert it to SMP_UNSPECIFIED.
> >
> > If tk_request() is supposed to return SMP_UNSPECIFIED on error, it should
> > be returned consistently, and its callers don't have to convert it again.
> Agreed, the conventions aren't clear here. I'll differ to Marcel to
> provide guidance in this case where as a long term solution might
> increase the scope of this patch beyond what would be reasonable.
> >
> > Guenter
> >
> > >> set_bit(SMP_FLAG_WAIT_USER, &smp->flags);
> > >> return 0;
> > >> }
> > >> --
> > >> 2.17.1
> > >>
> > >
> > > Thanks,
> > > Alain
> > >
> >

2020-04-06 12:06:34

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Simplify / fix return values from tk_request

Hi Guenter,

>>> Some static checker run by 0day reports a variableScope warning.
>>>
>>> net/bluetooth/smp.c:870:6: warning:
>>> The scope of the variable 'err' can be reduced. [variableScope]
>>>
>>> There is no need for two separate variables holding return values.
>>> Stick with the existing variable. While at it, don't pre-initialize
>>> 'ret' because it is set in each code path.
>>>
>>> tk_request() is supposed to return a negative error code on errors,
>>> not a bluetooth return code. The calling code converts the return
>>> value to SMP_UNSPECIFIED if needed.
>>>
>>> Fixes: 92516cd97fd4 ("Bluetooth: Always request for user confirmation for Just Works")
>>> Cc: Sonny Sasaka <[email protected]>
>>> Signed-off-by: Guenter Roeck <[email protected]>
>>> ---
>>> net/bluetooth/smp.c | 9 ++++-----
>>> 1 file changed, 4 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
>>> index d0b695ee49f6..30e8626dd553 100644
>>> --- a/net/bluetooth/smp.c
>>> +++ b/net/bluetooth/smp.c
>>> @@ -854,8 +854,7 @@ static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
>>> struct l2cap_chan *chan = conn->smp;
>>> struct smp_chan *smp = chan->data;
>>> u32 passkey = 0;
>>> - int ret = 0;
>>> - int err;
>>> + int ret;
>>>
>>> /* Initialize key for JUST WORKS */
>>> memset(smp->tk, 0, sizeof(smp->tk));
>>> @@ -887,12 +886,12 @@ static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
>>> /* If Just Works, Continue with Zero TK and ask user-space for
>>> * confirmation */
>>> if (smp->method == JUST_WORKS) {
>>> - err = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
>>> + ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
>>> hcon->type,
>>> hcon->dst_type,
>>> passkey, 1);
>>> - if (err)
>>> - return SMP_UNSPECIFIED;
>>> + if (ret)
>>> + return ret;
>> I think there may be some miss match between expected types of error
>> codes here. The SMP error code type seems to be expected throughout
>> this code base, so this change would propagate a potential negative
>> value while the rest of the SMP protocol expects strictly positive
>> error codes.
>>
>
> Up to the patch introducing the SMP_UNSPECIFIED return value, tk_request()
> returned negative error codes, and all callers convert it to SMP_UNSPECIFIED.
>
> If tk_request() is supposed to return SMP_UNSPECIFIED on error, it should
> be returned consistently, and its callers don't have to convert it again.

maybe we need to fix that initial patch then.

Regards

Marcel

2020-04-06 18:14:42

by Sonny Sasaka

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Simplify / fix return values from tk_request

Hi Marcel,

Can this patch be merged? Or do you prefer reverting the original
patch and relanding it together with the fix?

On Mon, Apr 6, 2020 at 5:06 AM Marcel Holtmann <[email protected]> wrote:
>
> Hi Guenter,
>
> >>> Some static checker run by 0day reports a variableScope warning.
> >>>
> >>> net/bluetooth/smp.c:870:6: warning:
> >>> The scope of the variable 'err' can be reduced. [variableScope]
> >>>
> >>> There is no need for two separate variables holding return values.
> >>> Stick with the existing variable. While at it, don't pre-initialize
> >>> 'ret' because it is set in each code path.
> >>>
> >>> tk_request() is supposed to return a negative error code on errors,
> >>> not a bluetooth return code. The calling code converts the return
> >>> value to SMP_UNSPECIFIED if needed.
> >>>
> >>> Fixes: 92516cd97fd4 ("Bluetooth: Always request for user confirmation for Just Works")
> >>> Cc: Sonny Sasaka <[email protected]>
> >>> Signed-off-by: Guenter Roeck <[email protected]>
> >>> ---
> >>> net/bluetooth/smp.c | 9 ++++-----
> >>> 1 file changed, 4 insertions(+), 5 deletions(-)
> >>>
> >>> diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
> >>> index d0b695ee49f6..30e8626dd553 100644
> >>> --- a/net/bluetooth/smp.c
> >>> +++ b/net/bluetooth/smp.c
> >>> @@ -854,8 +854,7 @@ static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
> >>> struct l2cap_chan *chan = conn->smp;
> >>> struct smp_chan *smp = chan->data;
> >>> u32 passkey = 0;
> >>> - int ret = 0;
> >>> - int err;
> >>> + int ret;
> >>>
> >>> /* Initialize key for JUST WORKS */
> >>> memset(smp->tk, 0, sizeof(smp->tk));
> >>> @@ -887,12 +886,12 @@ static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
> >>> /* If Just Works, Continue with Zero TK and ask user-space for
> >>> * confirmation */
> >>> if (smp->method == JUST_WORKS) {
> >>> - err = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
> >>> + ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
> >>> hcon->type,
> >>> hcon->dst_type,
> >>> passkey, 1);
> >>> - if (err)
> >>> - return SMP_UNSPECIFIED;
> >>> + if (ret)
> >>> + return ret;
> >> I think there may be some miss match between expected types of error
> >> codes here. The SMP error code type seems to be expected throughout
> >> this code base, so this change would propagate a potential negative
> >> value while the rest of the SMP protocol expects strictly positive
> >> error codes.
> >>
> >
> > Up to the patch introducing the SMP_UNSPECIFIED return value, tk_request()
> > returned negative error codes, and all callers convert it to SMP_UNSPECIFIED.
> >
> > If tk_request() is supposed to return SMP_UNSPECIFIED on error, it should
> > be returned consistently, and its callers don't have to convert it again.
>
> maybe we need to fix that initial patch then.
>
> Regards
>
> Marcel
>

2020-04-06 18:27:11

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Simplify / fix return values from tk_request

Hi Sonny,

> Can this patch be merged? Or do you prefer reverting the original
> patch and relanding it together with the fix?

since the original patch is already upstream, I need a patch with Fixes etc. And a Reviewed-By from you preferably.

Regards

Marcel

2020-04-06 18:46:27

by Guenter Roeck

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Simplify / fix return values from tk_request

On Mon, Apr 06, 2020 at 08:26:55PM +0200, Marcel Holtmann wrote:
> Hi Sonny,
>
> > Can this patch be merged? Or do you prefer reverting the original
> > patch and relanding it together with the fix?
>
> since the original patch is already upstream, I need a patch with Fixes etc. And a Reviewed-By from you preferably.
>

Isn't that what I sent with https://patchwork.kernel.org/patch/11472991/ ?
What is missing (besides Sonny's Reviewed-by: tag) ?

Thanks,
Guenter

2020-04-06 18:55:12

by Sonny Sasaka

[permalink] [raw]
Subject: [PATCH] Bluetooth: Simplify / fix return values from tk_request

From: Guenter Roeck <[email protected]>

Some static checker run by 0day reports a variableScope warning.

net/bluetooth/smp.c:870:6: warning:
The scope of the variable 'err' can be reduced. [variableScope]

There is no need for two separate variables holding return values.
Stick with the existing variable. While at it, don't pre-initialize
'ret' because it is set in each code path.

tk_request() is supposed to return a negative error code on errors,
not a bluetooth return code. The calling code converts the return
value to SMP_UNSPECIFIED if needed.

Fixes: 92516cd97fd4 ("Bluetooth: Always request for user confirmation for Just Works")
Cc: Sonny Sasaka <[email protected]>
Signed-off-by: Guenter Roeck <[email protected]>
Reviewed-by: Sonny Sasaka <[email protected]>
---
net/bluetooth/smp.c | 9 ++++-----
1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
index d0b695ee4..30e8626dd 100644
--- a/net/bluetooth/smp.c
+++ b/net/bluetooth/smp.c
@@ -854,8 +854,7 @@ static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
struct l2cap_chan *chan = conn->smp;
struct smp_chan *smp = chan->data;
u32 passkey = 0;
- int ret = 0;
- int err;
+ int ret;

/* Initialize key for JUST WORKS */
memset(smp->tk, 0, sizeof(smp->tk));
@@ -887,12 +886,12 @@ static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
/* If Just Works, Continue with Zero TK and ask user-space for
* confirmation */
if (smp->method == JUST_WORKS) {
- err = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
+ ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
hcon->type,
hcon->dst_type,
passkey, 1);
- if (err)
- return SMP_UNSPECIFIED;
+ if (ret)
+ return ret;
set_bit(SMP_FLAG_WAIT_USER, &smp->flags);
return 0;
}
--
2.24.1

2020-04-06 19:16:05

by Sonny Sasaka

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Simplify / fix return values from tk_request

Reviewed-by: Sonny Sasaka <[email protected]>

On Fri, Apr 3, 2020 at 8:02 AM Guenter Roeck <[email protected]> wrote:
>
> Some static checker run by 0day reports a variableScope warning.
>
> net/bluetooth/smp.c:870:6: warning:
> The scope of the variable 'err' can be reduced. [variableScope]
>
> There is no need for two separate variables holding return values.
> Stick with the existing variable. While at it, don't pre-initialize
> 'ret' because it is set in each code path.
>
> tk_request() is supposed to return a negative error code on errors,
> not a bluetooth return code. The calling code converts the return
> value to SMP_UNSPECIFIED if needed.
>
> Fixes: 92516cd97fd4 ("Bluetooth: Always request for user confirmation for Just Works")
> Cc: Sonny Sasaka <[email protected]>
> Signed-off-by: Guenter Roeck <[email protected]>
> ---
> net/bluetooth/smp.c | 9 ++++-----
> 1 file changed, 4 insertions(+), 5 deletions(-)
>
> diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
> index d0b695ee49f6..30e8626dd553 100644
> --- a/net/bluetooth/smp.c
> +++ b/net/bluetooth/smp.c
> @@ -854,8 +854,7 @@ static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
> struct l2cap_chan *chan = conn->smp;
> struct smp_chan *smp = chan->data;
> u32 passkey = 0;
> - int ret = 0;
> - int err;
> + int ret;
>
> /* Initialize key for JUST WORKS */
> memset(smp->tk, 0, sizeof(smp->tk));
> @@ -887,12 +886,12 @@ static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
> /* If Just Works, Continue with Zero TK and ask user-space for
> * confirmation */
> if (smp->method == JUST_WORKS) {
> - err = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
> + ret = mgmt_user_confirm_request(hcon->hdev, &hcon->dst,
> hcon->type,
> hcon->dst_type,
> passkey, 1);
> - if (err)
> - return SMP_UNSPECIFIED;
> + if (ret)
> + return ret;
> set_bit(SMP_FLAG_WAIT_USER, &smp->flags);
> return 0;
> }
> --
> 2.17.1
>

2020-04-07 16:35:58

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Simplify / fix return values from tk_request

Hi Sonny,

> Some static checker run by 0day reports a variableScope warning.
>
> net/bluetooth/smp.c:870:6: warning:
> The scope of the variable 'err' can be reduced. [variableScope]
>
> There is no need for two separate variables holding return values.
> Stick with the existing variable. While at it, don't pre-initialize
> 'ret' because it is set in each code path.
>
> tk_request() is supposed to return a negative error code on errors,
> not a bluetooth return code. The calling code converts the return
> value to SMP_UNSPECIFIED if needed.
>
> Fixes: 92516cd97fd4 ("Bluetooth: Always request for user confirmation for Just Works")
> Cc: Sonny Sasaka <[email protected]>
> Signed-off-by: Guenter Roeck <[email protected]>
> Reviewed-by: Sonny Sasaka <[email protected]>
> ---
> net/bluetooth/smp.c | 9 ++++-----
> 1 file changed, 4 insertions(+), 5 deletions(-)

patch has been applied to bluetooth-next tree.

Regards

Marcel

2020-04-07 16:42:51

by Sonny Sasaka

[permalink] [raw]
Subject: Re: [PATCH] Bluetooth: Simplify / fix return values from tk_request

Thanks, Marcel.

Thanks, Guenter for finding this out.

On Tue, Apr 7, 2020 at 9:35 AM Marcel Holtmann <[email protected]> wrote:
>
> Hi Sonny,
>
> > Some static checker run by 0day reports a variableScope warning.
> >
> > net/bluetooth/smp.c:870:6: warning:
> > The scope of the variable 'err' can be reduced. [variableScope]
> >
> > There is no need for two separate variables holding return values.
> > Stick with the existing variable. While at it, don't pre-initialize
> > 'ret' because it is set in each code path.
> >
> > tk_request() is supposed to return a negative error code on errors,
> > not a bluetooth return code. The calling code converts the return
> > value to SMP_UNSPECIFIED if needed.
> >
> > Fixes: 92516cd97fd4 ("Bluetooth: Always request for user confirmation for Just Works")
> > Cc: Sonny Sasaka <[email protected]>
> > Signed-off-by: Guenter Roeck <[email protected]>
> > Reviewed-by: Sonny Sasaka <[email protected]>
> > ---
> > net/bluetooth/smp.c | 9 ++++-----
> > 1 file changed, 4 insertions(+), 5 deletions(-)
>
> patch has been applied to bluetooth-next tree.
>
> Regards
>
> Marcel
>