thermal: core: treat correctly the return value of *scanf calls
authorEduardo Valentin <edubezval@gmail.com>
Tue, 8 Nov 2016 05:08:58 +0000 (21:08 -0800)
committerZhang Rui <rui.zhang@intel.com>
Wed, 23 Nov 2016 02:06:12 +0000 (10:06 +0800)
This patch checks the return value of all calls to *scanf.
The check is to simply match the number of expect inputs.

The current code does not do any recovery in case the
number of treated inputs are different than the expected.
Therefore, keeping the same behavior.

Cc: Zhang Rui <rui.zhang@intel.com>
Cc: linux-pm@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Eduardo Valentin <edubezval@gmail.com>
Signed-off-by: Zhang Rui <rui.zhang@intel.com>
drivers/thermal/thermal_core.c

index f5b519a9f5671dff1e7da658975f87e2efd51a8c..e2c4fc4904d66d32de66de780bd582e672a21aa2 100644 (file)
@@ -874,7 +874,7 @@ trip_point_type_show(struct device *dev, struct device_attribute *attr,
        if (!tz->ops->get_trip_type)
                return -EPERM;
 
-       if (!sscanf(attr->attr.name, "trip_point_%d_type", &trip))
+       if (sscanf(attr->attr.name, "trip_point_%d_type", &trip) != 1)
                return -EINVAL;
 
        result = tz->ops->get_trip_type(tz, trip, &type);
@@ -906,7 +906,7 @@ trip_point_temp_store(struct device *dev, struct device_attribute *attr,
        if (!tz->ops->set_trip_temp)
                return -EPERM;
 
-       if (!sscanf(attr->attr.name, "trip_point_%d_temp", &trip))
+       if (sscanf(attr->attr.name, "trip_point_%d_temp", &trip) != 1)
                return -EINVAL;
 
        if (kstrtoint(buf, 10, &temperature))
@@ -932,7 +932,7 @@ trip_point_temp_show(struct device *dev, struct device_attribute *attr,
        if (!tz->ops->get_trip_temp)
                return -EPERM;
 
-       if (!sscanf(attr->attr.name, "trip_point_%d_temp", &trip))
+       if (sscanf(attr->attr.name, "trip_point_%d_temp", &trip) != 1)
                return -EINVAL;
 
        ret = tz->ops->get_trip_temp(tz, trip, &temperature);
@@ -954,7 +954,7 @@ trip_point_hyst_store(struct device *dev, struct device_attribute *attr,
        if (!tz->ops->set_trip_hyst)
                return -EPERM;
 
-       if (!sscanf(attr->attr.name, "trip_point_%d_hyst", &trip))
+       if (sscanf(attr->attr.name, "trip_point_%d_hyst", &trip) != 1)
                return -EINVAL;
 
        if (kstrtoint(buf, 10, &temperature))
@@ -984,7 +984,7 @@ trip_point_hyst_show(struct device *dev, struct device_attribute *attr,
        if (!tz->ops->get_trip_hyst)
                return -EPERM;
 
-       if (!sscanf(attr->attr.name, "trip_point_%d_hyst", &trip))
+       if (sscanf(attr->attr.name, "trip_point_%d_hyst", &trip) != 1)
                return -EINVAL;
 
        ret = tz->ops->get_trip_hyst(tz, trip, &temperature);
@@ -999,7 +999,7 @@ passive_store(struct device *dev, struct device_attribute *attr,
        struct thermal_zone_device *tz = to_thermal_zone(dev);
        int state;
 
-       if (!sscanf(buf, "%d\n", &state))
+       if (sscanf(buf, "%d\n", &state) != 1)
                return -EINVAL;
 
        /* sanity check: values below 1000 millicelcius don't make sense
@@ -1457,7 +1457,7 @@ thermal_cooling_device_cur_state_store(struct device *dev,
        unsigned long state;
        int result;
 
-       if (!sscanf(buf, "%ld\n", &state))
+       if (sscanf(buf, "%ld\n", &state) != 1)
                return -EINVAL;
 
        if ((long)state < 0)