All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jean Delvare <khali@linux-fr.org>
To: Axel Lin <axel.lin@gmail.com>
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
	Paul Thomas <pthomas8589@gmail.com>,
	lm-sensors@lm-sensors.org
Subject: Re: [lm-sensors] [PATCH] hwmon: (ads7871) Fix ads7871_probe error
Date: Tue, 17 Aug 2010 11:07:47 +0000	[thread overview]
Message-ID: <20100817130747.3ee0efb9@hyperion.delvare> (raw)
In-Reply-To: <1281922277.26991.3.camel@mola>

Hi Alex,

On Mon, 16 Aug 2010 09:31:17 +0800, Axel Lin wrote:
> We need to call hwmon_device_unregister() if an error is detected after
> sucessfully register hwmon device.
> 
> Signed-off-by: Axel Lin <axel.lin@gmail.com>
> ---
>  drivers/hwmon/ads7871.c |    4 +++-
>  1 files changed, 3 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/hwmon/ads7871.c b/drivers/hwmon/ads7871.c
> index b300a20..303db92 100644
> --- a/drivers/hwmon/ads7871.c
> +++ b/drivers/hwmon/ads7871.c
> @@ -201,11 +201,13 @@ static int __devinit ads7871_probe(struct spi_device *spi)
>  	we need to make sure we really have a chip*/
>  	if (val != ret) {
>  		err = -ENODEV;
> -		goto error_remove;
> +		goto error_unregister;
>  	}
>  
>  	return 0;
>  
> +error_unregister:
> +	hwmon_device_unregister(pdata->hwmon_dev);
>  error_remove:
>  	sysfs_remove_group(&spi->dev.kobj, &ads7871_group);
>  error_free:

The bug is real, but I don't think the fix is correct. You should never
have to unregister the hwmon device in the error path, because you
should ensure the hardware is there and working _before_ you register
the hwmon device.

User-space could watch for hwmon devices being added or removed, and
you don't want to trigger such events for a device which isn't going to
work.

So I would suggest reworking the order in which things are done,
leaving hwmon_device_register() at the end of the function. This won't
only fix the error path, this will also close a race window, as for the
moment, the device is exposed to user-space _before_ it it properly
initialized, which is wrong.

Please send an updated patch and I'll be happy to apply it.

-- 
Jean Delvare

_______________________________________________
lm-sensors mailing list
lm-sensors@lm-sensors.org
http://lists.lm-sensors.org/mailman/listinfo/lm-sensors

WARNING: multiple messages have this Message-ID (diff)
From: Jean Delvare <khali@linux-fr.org>
To: Axel Lin <axel.lin@gmail.com>
Cc: linux-kernel <linux-kernel@vger.kernel.org>,
	Paul Thomas <pthomas8589@gmail.com>,
	lm-sensors@lm-sensors.org
Subject: Re: [PATCH] hwmon: (ads7871) Fix ads7871_probe error path
Date: Tue, 17 Aug 2010 13:07:47 +0200	[thread overview]
Message-ID: <20100817130747.3ee0efb9@hyperion.delvare> (raw)
In-Reply-To: <1281922277.26991.3.camel@mola>

Hi Alex,

On Mon, 16 Aug 2010 09:31:17 +0800, Axel Lin wrote:
> We need to call hwmon_device_unregister() if an error is detected after
> sucessfully register hwmon device.
> 
> Signed-off-by: Axel Lin <axel.lin@gmail.com>
> ---
>  drivers/hwmon/ads7871.c |    4 +++-
>  1 files changed, 3 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/hwmon/ads7871.c b/drivers/hwmon/ads7871.c
> index b300a20..303db92 100644
> --- a/drivers/hwmon/ads7871.c
> +++ b/drivers/hwmon/ads7871.c
> @@ -201,11 +201,13 @@ static int __devinit ads7871_probe(struct spi_device *spi)
>  	we need to make sure we really have a chip*/
>  	if (val != ret) {
>  		err = -ENODEV;
> -		goto error_remove;
> +		goto error_unregister;
>  	}
>  
>  	return 0;
>  
> +error_unregister:
> +	hwmon_device_unregister(pdata->hwmon_dev);
>  error_remove:
>  	sysfs_remove_group(&spi->dev.kobj, &ads7871_group);
>  error_free:

The bug is real, but I don't think the fix is correct. You should never
have to unregister the hwmon device in the error path, because you
should ensure the hardware is there and working _before_ you register
the hwmon device.

User-space could watch for hwmon devices being added or removed, and
you don't want to trigger such events for a device which isn't going to
work.

So I would suggest reworking the order in which things are done,
leaving hwmon_device_register() at the end of the function. This won't
only fix the error path, this will also close a race window, as for the
moment, the device is exposed to user-space _before_ it it properly
initialized, which is wrong.

Please send an updated patch and I'll be happy to apply it.

-- 
Jean Delvare

  reply	other threads:[~2010-08-17 11:07 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-08-16  1:31 [lm-sensors] [PATCH] hwmon: (ads7871) Fix ads7871_probe error path Axel Lin
2010-08-16  1:31 ` Axel Lin
2010-08-17 11:07 ` Jean Delvare [this message]
2010-08-17 11:07   ` Jean Delvare
2010-08-17 15:15   ` [lm-sensors] [PATCH] hwmon: (ads7871) Fix ads7871_probe error Paul Thomas
2010-08-17 15:15     ` [PATCH] hwmon: (ads7871) Fix ads7871_probe error path Paul Thomas
2010-08-17 18:42     ` [lm-sensors] [PATCH] hwmon: (ads7871) Fix ads7871_probe error Jean Delvare
2010-08-17 18:42       ` [PATCH] hwmon: (ads7871) Fix ads7871_probe error path Jean Delvare
2010-08-22 14:25 ` [lm-sensors] [PATCH] hwmon: (ads7871) Fix ads7871_probe init path Axel Lin
2010-08-22 14:25   ` Axel Lin
2010-08-22 20:48   ` [lm-sensors] [PATCH] hwmon: (ads7871) Fix ads7871_probe init Jean Delvare
2010-08-22 20:48     ` [PATCH] hwmon: (ads7871) Fix ads7871_probe init path Jean Delvare

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100817130747.3ee0efb9@hyperion.delvare \
    --to=khali@linux-fr.org \
    --cc=axel.lin@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lm-sensors@lm-sensors.org \
    --cc=pthomas8589@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.