On 11/17/2017 08:21 AM, Arvind Yadav wrote:
> platform_get_irq_byname() can fail here and we must check its return value.
> 
> device_register() can fail here, initialised 'result' variable
> beforen'goto fail_register' otherwise vlynq_probe will return uninitialised
> 'result' variable.
> 
> Signed-off-by: Arvind Yadav <[email protected]>
> ---
>  drivers/vlynq/vlynq.c | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/vlynq/vlynq.c b/drivers/vlynq/vlynq.c
> index c0227f9..bc735f9 100644
> --- a/drivers/vlynq/vlynq.c
> +++ b/drivers/vlynq/vlynq.c
> @@ -722,13 +722,19 @@ static int vlynq_probe(struct platform_device *pdev)
>                                           VLYNQ_REMOTE_OFFSET);
>  
>       dev->irq = platform_get_irq_byname(pdev, "irq");
> +     if (dev->irq < 0) {
> +             result = dev->irq;
> +             goto fail_register;
> +     }

That part looks fine.

>       dev->irq_start = irq_res->start;
>       dev->irq_end = irq_res->end;
>       dev->local_irq = dev->irq_end - dev->irq_start;
>       dev->remote_irq = dev->local_irq - 1;
>  
> -     if (device_register(&dev->dev))
> +     if (device_register(&dev->dev)) {
> +             result = -ENXIO;
>               goto fail_register;
> +     }

However here, we should propagate the return value of device_register()
to be consistent with the changes earlier.

>       platform_set_drvdata(pdev, dev);
>  
>       printk(KERN_INFO "%s: regs 0x%p, irq %d, mem 0x%p\n",
> 

-- 
Florian

Reply via email to