2018-08-06 13:32:35

by Bryant G. Ly

[permalink] [raw]
Subject: [PATCH] misc: ibmvsm: Fix wrong assignment of return code

From: "Bryant G. Ly" <[email protected]>

Currently the assignment is flipped and rc is always 0.

Signed-off-by: Bryant G. Ly <[email protected]>
Reviewed-by: Bradley Warrum <[email protected]>
---
drivers/misc/ibmvmc.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/misc/ibmvmc.c b/drivers/misc/ibmvmc.c
index 8f82bb9..b8aaa68 100644
--- a/drivers/misc/ibmvmc.c
+++ b/drivers/misc/ibmvmc.c
@@ -2131,7 +2131,7 @@ static int ibmvmc_init_crq_queue(struct crq_server_adapter *adapter)
retrc = plpar_hcall_norets(H_REG_CRQ,
vdev->unit_address,
queue->msg_token, PAGE_SIZE);
- retrc = rc;
+ rc = retrc;

if (rc == H_RESOURCE)
rc = ibmvmc_reset_crq_queue(adapter);
--
2.7.2



2018-08-07 12:48:06

by Michael Ellerman

[permalink] [raw]
Subject: Re: [PATCH] misc: ibmvsm: Fix wrong assignment of return code

"Bryant G. Ly" <[email protected]> writes:

> From: "Bryant G. Ly" <[email protected]>
>
> Currently the assignment is flipped and rc is always 0.

If you'd left rc uninitialised at the start of the function the compiler
would have caught it for you.

And what is the consequence of the bug? Nothing, complete system crash,
subtle data corruption?

Also this should be tagged:

Fixes: 0eca353e7ae7 ("misc: IBM Virtual Management Channel Driver (VMC)")

cheers

> diff --git a/drivers/misc/ibmvmc.c b/drivers/misc/ibmvmc.c
> index 8f82bb9..b8aaa68 100644
> --- a/drivers/misc/ibmvmc.c
> +++ b/drivers/misc/ibmvmc.c
> @@ -2131,7 +2131,7 @@ static int ibmvmc_init_crq_queue(struct crq_server_adapter *adapter)
> retrc = plpar_hcall_norets(H_REG_CRQ,
> vdev->unit_address,
> queue->msg_token, PAGE_SIZE);
> - retrc = rc;
> + rc = retrc;
>
> if (rc == H_RESOURCE)
> rc = ibmvmc_reset_crq_queue(adapter);


2018-08-07 14:23:46

by Bryant G. Ly

[permalink] [raw]
Subject: Re: [PATCH] misc: ibmvsm: Fix wrong assignment of return code


On 8/7/18 7:28 AM, Michael Ellerman wrote:

> "Bryant G. Ly" <[email protected]> writes:
>
>> From: "Bryant G. Ly" <[email protected]>
>>
>> Currently the assignment is flipped and rc is always 0.
> If you'd left rc uninitialised at the start of the function the compiler
> would have caught it for you.
>
> And what is the consequence of the bug? Nothing, complete system crash,
> subtle data corruption?

The consequence would be that if the CRQ Registration failed the first time
due to not enough resources, it would never try to reset and try again.

If it fails due to any other error then it would just fail the sending of the
crq init message, thus it would just wait for the client to init, which would
never happen.

We would also have a memory leak since in the error case DMA would never get
un-mapped and the message queue never gets freed.

>
> Also this should be tagged:
>
> Fixes: 0eca353e7ae7 ("misc: IBM Virtual Management Channel Driver (VMC)")
>
> cheers
>
Yep, sorry I forgot to add the Fixes:..

-Bryant