2016-11-19 18:26:15

by Quentin Lambert

[permalink] [raw]
Subject: [PATCH] stm class: Add a missing call to put_device

Most error branches following the call to class_find_device contain
a call to put_device. This patch add calls to put_device where
they are missing.

This issue was found with Hector.

Signed-off-by: Quentin Lambert <[email protected]>

---
drivers/hwtracing/stm/core.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

--- a/drivers/hwtracing/stm/core.c
+++ b/drivers/hwtracing/stm/core.c
@@ -368,8 +368,10 @@ static int stm_char_open(struct inode *i
return -ENODEV;

stmf = kzalloc(sizeof(*stmf), GFP_KERNEL);
- if (!stmf)
+ if (!stmf) {
+ put_device(dev);
return -ENOMEM;
+ }

stm_output_init(&stmf->output);
stmf->stm = to_stm_device(dev);


2016-11-21 07:35:07

by Alexander Shishkin

[permalink] [raw]
Subject: Re: [PATCH] stm class: Add a missing call to put_device

Quentin Lambert <[email protected]> writes:

> Most error branches following the call to class_find_device contain
> a call to put_device. This patch add calls to put_device where
> they are missing.
>
> This issue was found with Hector.
>
> Signed-off-by: Quentin Lambert <[email protected]>
>
> ---
> drivers/hwtracing/stm/core.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> --- a/drivers/hwtracing/stm/core.c
> +++ b/drivers/hwtracing/stm/core.c
> @@ -368,8 +368,10 @@ static int stm_char_open(struct inode *i
> return -ENODEV;
>
> stmf = kzalloc(sizeof(*stmf), GFP_KERNEL);
> - if (!stmf)
> + if (!stmf) {
> + put_device(dev);
> return -ENOMEM;
> + }

There is a goto label at the bottom of this function which is supposed
to deal with this. See the fix that we already have [1] for this issue.

[1] https://git.kernel.org/cgit/linux/kernel/git/ash/stm.git/commit/?h=stm-for-greg-20161118&id=a0ebf519b8a2666438d999c62995618c710573e5

Regards,
--
alex

2016-11-21 08:02:16

by Quentin Lambert

[permalink] [raw]
Subject: Re: [PATCH] stm class: Add a missing call to put_device



On 11/21/2016 08:32 AM, Alexander Shishkin wrote:
> Quentin Lambert <[email protected]> writes:
>
>> Most error branches following the call to class_find_device contain
>> a call to put_device. This patch add calls to put_device where
>> they are missing.
>>
>> This issue was found with Hector.
>>
>> Signed-off-by: Quentin Lambert <[email protected]>
>>
>> ---
>> drivers/hwtracing/stm/core.c | 4 +++-
>> 1 file changed, 3 insertions(+), 1 deletion(-)
>>
>> --- a/drivers/hwtracing/stm/core.c
>> +++ b/drivers/hwtracing/stm/core.c
>> @@ -368,8 +368,10 @@ static int stm_char_open(struct inode *i
>> return -ENODEV;
>>
>> stmf = kzalloc(sizeof(*stmf), GFP_KERNEL);
>> - if (!stmf)
>> + if (!stmf) {
>> + put_device(dev);
>> return -ENOMEM;
>> + }
> There is a goto label at the bottom of this function which is supposed
> to deal with this. See the fix that we already have [1] for this issue.
>
> [1] https://git.kernel.org/cgit/linux/kernel/git/ash/stm.git/commit/?h=stm-for-greg-20161118&id=a0ebf519b8a2666438d999c62995618c710573e5
>
> Regards,
> --
> alex
Your fix is better, you are right, I did not use the goto label because
of the free.

Thanks for your feedback though.

Regards,
Quentin