diff options
| -rw-r--r-- | drivers/hwmon/it87.c | 59 | 
1 files changed, 44 insertions, 15 deletions
| diff --git a/drivers/hwmon/it87.c b/drivers/hwmon/it87.c index 96306a6f844e..8282282eb4ca 100644 --- a/drivers/hwmon/it87.c +++ b/drivers/hwmon/it87.c @@ -363,7 +363,10 @@ static ssize_t set_in_min(struct device *dev, struct device_attribute *attr,  	int nr = sensor_attr->index;  	struct it87_data *data = dev_get_drvdata(dev); -	unsigned long val = simple_strtoul(buf, NULL, 10); +	unsigned long val; + +	if (strict_strtoul(buf, 10, &val) < 0) +		return -EINVAL;  	mutex_lock(&data->update_lock);  	data->in_min[nr] = IN_TO_REG(val); @@ -379,7 +382,10 @@ static ssize_t set_in_max(struct device *dev, struct device_attribute *attr,  	int nr = sensor_attr->index;  	struct it87_data *data = dev_get_drvdata(dev); -	unsigned long val = simple_strtoul(buf, NULL, 10); +	unsigned long val; + +	if (strict_strtoul(buf, 10, &val) < 0) +		return -EINVAL;  	mutex_lock(&data->update_lock);  	data->in_max[nr] = IN_TO_REG(val); @@ -452,7 +458,10 @@ static ssize_t set_temp_max(struct device *dev, struct device_attribute *attr,  	int nr = sensor_attr->index;  	struct it87_data *data = dev_get_drvdata(dev); -	int val = simple_strtol(buf, NULL, 10); +	long val; + +	if (strict_strtol(buf, 10, &val) < 0) +		return -EINVAL;  	mutex_lock(&data->update_lock);  	data->temp_high[nr] = TEMP_TO_REG(val); @@ -467,7 +476,10 @@ static ssize_t set_temp_min(struct device *dev, struct device_attribute *attr,  	int nr = sensor_attr->index;  	struct it87_data *data = dev_get_drvdata(dev); -	int val = simple_strtol(buf, NULL, 10); +	long val; + +	if (strict_strtol(buf, 10, &val) < 0) +		return -EINVAL;  	mutex_lock(&data->update_lock);  	data->temp_low[nr] = TEMP_TO_REG(val); @@ -510,7 +522,10 @@ static ssize_t set_sensor(struct device *dev, struct device_attribute *attr,  	int nr = sensor_attr->index;  	struct it87_data *data = dev_get_drvdata(dev); -	int val = simple_strtol(buf, NULL, 10); +	long val; + +	if (strict_strtol(buf, 10, &val) < 0) +		return -EINVAL;  	mutex_lock(&data->update_lock); @@ -618,9 +633,12 @@ static ssize_t set_fan_min(struct device *dev, struct device_attribute *attr,  	int nr = sensor_attr->index;  	struct it87_data *data = dev_get_drvdata(dev); -	int val = simple_strtol(buf, NULL, 10); +	long val;  	u8 reg; +	if (strict_strtol(buf, 10, &val) < 0) +		return -EINVAL; +  	mutex_lock(&data->update_lock);  	reg = it87_read_value(data, IT87_REG_FAN_DIV);  	switch (nr) { @@ -647,10 +665,13 @@ static ssize_t set_fan_div(struct device *dev, struct device_attribute *attr,  	int nr = sensor_attr->index;  	struct it87_data *data = dev_get_drvdata(dev); -	unsigned long val = simple_strtoul(buf, NULL, 10); +	unsigned long val;  	int min;  	u8 old; +	if (strict_strtoul(buf, 10, &val) < 0) +		return -EINVAL; +  	mutex_lock(&data->update_lock);  	old = it87_read_value(data, IT87_REG_FAN_DIV); @@ -689,9 +710,9 @@ static ssize_t set_pwm_enable(struct device *dev,  	int nr = sensor_attr->index;  	struct it87_data *data = dev_get_drvdata(dev); -	int val = simple_strtol(buf, NULL, 10); +	long val; -	if (val < 0 || val > 2) +	if (strict_strtol(buf, 10, &val) < 0 || val < 0 || val > 2)  		return -EINVAL;  	mutex_lock(&data->update_lock); @@ -727,9 +748,9 @@ static ssize_t set_pwm(struct device *dev, struct device_attribute *attr,  	int nr = sensor_attr->index;  	struct it87_data *data = dev_get_drvdata(dev); -	int val = simple_strtol(buf, NULL, 10); +	long val; -	if (val < 0 || val > 255) +	if (strict_strtol(buf, 10, &val) < 0 || val < 0 || val > 255)  		return -EINVAL;  	mutex_lock(&data->update_lock); @@ -747,9 +768,12 @@ static ssize_t set_pwm_freq(struct device *dev,  		struct device_attribute *attr, const char *buf, size_t count)  {  	struct it87_data *data = dev_get_drvdata(dev); -	unsigned long val = simple_strtoul(buf, NULL, 10); +	unsigned long val;  	int i; +	if (strict_strtoul(buf, 10, &val) < 0) +		return -EINVAL; +  	/* Search for the nearest available frequency */  	for (i = 0; i < 7; i++) {  		if (val > (pwm_freq[i] + pwm_freq[i+1]) / 2) @@ -871,7 +895,10 @@ static ssize_t set_fan16_min(struct device *dev, struct device_attribute *attr,  	struct sensor_device_attribute *sensor_attr = to_sensor_dev_attr(attr);  	int nr = sensor_attr->index;  	struct it87_data *data = dev_get_drvdata(dev); -	int val = simple_strtol(buf, NULL, 10); +	long val; + +	if (strict_strtol(buf, 10, &val) < 0) +		return -EINVAL;  	mutex_lock(&data->update_lock);  	data->fan_min[nr] = FAN16_TO_REG(val); @@ -992,9 +1019,11 @@ static ssize_t store_vrm_reg(struct device *dev, struct device_attribute *attr,  		const char *buf, size_t count)  {  	struct it87_data *data = dev_get_drvdata(dev); -	u32 val; +	unsigned long val; + +	if (strict_strtoul(buf, 10, &val) < 0) +		return -EINVAL; -	val = simple_strtoul(buf, NULL, 10);  	data->vrm = val;  	return count; | 
