lkml.org 
[lkml]   [2008]   [Feb]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
SubjectRE: [Bug-fix]:2.6.25-rc0 Generic thermal management [Patch 1/2]: validating input parameters
Date
From
> On Mon, 11 Feb 2008 15:57:06 +0530
> "Thomas, Sujith" <sujith.thomas@intel.com> wrote:

> > From: Thomas Sujith <sujith.thomas@intel.com>
> >
> > Added sanity checks for interface functions in thermal with
> > other modules such as fan, processor, video etc..
> >
> > Signed-off-by: Thomas Sujith <sujith.thomas@intel.com>
> > ---
> > drivers/thermal/thermal.c | 69
> > +++++++++++++++++++++++++++++-----------------
>
> The patch is fairly seriously wordwrapped.
Should be fixed now.
>
> > 1 files changed, 44 insertions(+), 25 deletions(-)
> >
> > Index: linux-2.6.24-rc3/drivers/thermal/thermal.c
> > ===================================================================
> > --- linux-2.6.24-rc3.orig/drivers/thermal/thermal.c
> > +++ linux-2.6.24-rc3/drivers/thermal/thermal.c
> > @@ -301,13 +301,27 @@ int thermal_zone_bind_cooling_device(str
> > {
> > struct thermal_cooling_device_instance *dev;
> > struct thermal_cooling_device_instance *pos;
> > + struct thermal_zone_device *pos1;
> > + struct thermal_cooling_device *pos2;
> > int result;
> >
> > + if (!tz || !cdev)
> > + return -EINVAL;
>
> Is this change actually needed? It's sloppy for a caller to be
passing
> invalid arguments into a callee, and it's not good for the callee to
just
> hide that sloppiness.
I agree; removed
>
> > - return NULL;
> > + return ERR_PTR(-EINVAL);
>
> the patch adds several spaces like this in places where we don't
normally
> put them.
I agree; removed


From: Thomas Sujith <sujith.thomas@intel.com>

Added sanity checks for interface functions in thermal with
other modules such as fan, processor, video etc. Using ERR_PTR
to return errors.

Signed-off-by: Thomas Sujith <sujith.thomas@intel.com>
---
drivers/thermal/thermal.c | 63
+++++++++++++++++++++++++++-------------------
1 files changed, 38 insertions(+), 25 deletions(-)

Index: linux-2.6.24-rc3/drivers/thermal/thermal.c
===================================================================
--- linux-2.6.24-rc3.orig/drivers/thermal/thermal.c
+++ linux-2.6.24-rc3/drivers/thermal/thermal.c
@@ -301,13 +301,24 @@ int thermal_zone_bind_cooling_device(str
{
struct thermal_cooling_device_instance *dev;
struct thermal_cooling_device_instance *pos;
+ struct thermal_zone_device *pos1;
+ struct thermal_cooling_device *pos2;
int result;

if (trip >= tz->trips ||
(trip < 0 && trip != THERMAL_TRIPS_NONE))
return -EINVAL;

- if (!tz || !cdev)
+ list_for_each_entry(pos1, &thermal_tz_list, node) {
+ if (pos1 == tz)
+ break;
+ }
+ list_for_each_entry(pos2, &thermal_cdev_list, node) {
+ if (pos2 == cdev)
+ break;
+ }
+
+ if (tz != pos1 || cdev != pos2)
return -EINVAL;

dev =
@@ -427,21 +438,24 @@ struct thermal_cooling_device *thermal_c
struct thermal_zone_device *pos;
int result;

+ if (!type)
+ return ERR_PTR(-EINVAL);
+
if (strlen(type) >= THERMAL_NAME_LENGTH)
- return NULL;
+ return ERR_PTR(-EINVAL);

if (!ops || !ops->get_max_state || !ops->get_cur_state ||
!ops->set_cur_state)
- return NULL;
+ return ERR_PTR(-EINVAL);

cdev = kzalloc(sizeof(struct thermal_cooling_device),
GFP_KERNEL);
if (!cdev)
- return NULL;
+ return ERR_PTR(-ENOMEM);

result = get_idr(&thermal_cdev_idr, &thermal_idr_lock,
&cdev->id);
if (result) {
kfree(cdev);
- return NULL;
+ return ERR_PTR(result);
}

strcpy(cdev->type, type);
@@ -453,16 +467,14 @@ struct thermal_cooling_device *thermal_c
if (result) {
release_idr(&thermal_cdev_idr, &thermal_idr_lock,
cdev->id);
kfree(cdev);
- return NULL;
+ return ERR_PTR(result);
}

/* sys I/F */
- if (type) {
- result = device_create_file(&cdev->device,
- &dev_attr_cdev_type);
- if (result)
- goto unregister;
- }
+ result = device_create_file(&cdev->device,
+ &dev_attr_cdev_type);
+ if (result)
+ goto unregister;

result = device_create_file(&cdev->device, &dev_attr_max_state);
if (result)
@@ -490,7 +502,7 @@ struct thermal_cooling_device *thermal_c
unregister:
release_idr(&thermal_cdev_idr, &thermal_idr_lock, cdev->id);
device_unregister(&cdev->device);
- return NULL;
+ return ERR_PTR(result);
}
EXPORT_SYMBOL(thermal_cooling_device_register);

@@ -559,18 +571,21 @@ struct thermal_zone_device *thermal_zone
int result;
int count;

+ if (!type)
+ return ERR_PTR(-EINVAL);
+
if (strlen(type) >= THERMAL_NAME_LENGTH)
- return NULL;
+ return ERR_PTR(-EINVAL);

if (trips > THERMAL_MAX_TRIPS || trips < 0)
- return NULL;
+ return ERR_PTR(-EINVAL);

if (!ops || !ops->get_temp)
- return NULL;
+ return ERR_PTR(-EINVAL);

tz = kzalloc(sizeof(struct thermal_zone_device), GFP_KERNEL);
if (!tz)
- return NULL;
+ return ERR_PTR(-ENOMEM);

INIT_LIST_HEAD(&tz->cooling_devices);
idr_init(&tz->idr);
@@ -578,7 +593,7 @@ struct thermal_zone_device *thermal_zone
result = get_idr(&thermal_tz_idr, &thermal_idr_lock, &tz->id);
if (result) {
kfree(tz);
- return NULL;
+ return ERR_PTR(result);
}

strcpy(tz->type, type);
@@ -591,15 +606,13 @@ struct thermal_zone_device *thermal_zone
if (result) {
release_idr(&thermal_tz_idr, &thermal_idr_lock, tz->id);
kfree(tz);
- return NULL;
+ return ERR_PTR(result);
}

/* sys I/F */
- if (type) {
- result = device_create_file(&tz->device,
&dev_attr_type);
- if (result)
- goto unregister;
- }
+ result = device_create_file(&tz->device, &dev_attr_type);
+ if (result)
+ goto unregister;

result = device_create_file(&tz->device, &dev_attr_temp);
if (result)
@@ -633,7 +646,7 @@ struct thermal_zone_device *thermal_zone
unregister:
release_idr(&thermal_tz_idr, &thermal_idr_lock, tz->id);
device_unregister(&tz->device);
- return NULL;
+ return ERR_PTR(result);
}
EXPORT_SYMBOL(thermal_zone_device_register);


\
 
 \ /
  Last update: 2008-02-12 17:01    [W:0.174 / U:0.084 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site