summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorAxel Lin <axel.lin@gmail.com>2010-11-09 11:41:48 +0300
committerGuenter Roeck <guenter.roeck@ericsson.com>2010-11-11 20:43:51 +0300
commit4f5b7994f0610fefff0782227ab71469ece54a5b (patch)
tree15469190314d8eabd4d15370d57222348f896c74 /drivers
parentf0030d87be3cb2eb9eac633d09cb5d9f107ed0c6 (diff)
downloadlinux-4f5b7994f0610fefff0782227ab71469ece54a5b.tar.xz
hwmon: (gpio-fan) Fix fan_ctrl_init error path
In current implementation, the sysfs entries is not removed before return -ENODEV. Creating the sysfs attribute should be the last thing done by the function, after all the rest has been successful. Otherwise there is a small window during which user-space can access the attribute but the driver isn't ready to deal with the requests. Fix it by moving sysfs_create_group to be the last thing done by the function. Signed-off-by: Axel Lin <axel.lin@gmail.com> Acked-by: Simon Guinot <sguinot@lacie.com> Signed-off-by: Guenter Roeck <guenter.roeck@ericsson.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/hwmon/gpio-fan.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/drivers/hwmon/gpio-fan.c b/drivers/hwmon/gpio-fan.c
index aa701a183707..f141a1de519c 100644
--- a/drivers/hwmon/gpio-fan.c
+++ b/drivers/hwmon/gpio-fan.c
@@ -376,10 +376,6 @@ static int fan_ctrl_init(struct gpio_fan_data *fan_data,
}
}
- err = sysfs_create_group(&pdev->dev.kobj, &gpio_fan_ctrl_group);
- if (err)
- goto err_free_gpio;
-
fan_data->num_ctrl = num_ctrl;
fan_data->ctrl = ctrl;
fan_data->num_speed = pdata->num_speed;
@@ -391,6 +387,10 @@ static int fan_ctrl_init(struct gpio_fan_data *fan_data,
goto err_free_gpio;
}
+ err = sysfs_create_group(&pdev->dev.kobj, &gpio_fan_ctrl_group);
+ if (err)
+ goto err_free_gpio;
+
return 0;
err_free_gpio: