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);
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
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