Skip to content

Commit

Permalink
thermal/core: Protect thermal device operations against thermal devic…
Browse files Browse the repository at this point in the history
…e removal

Thermal device operations may be called after thermal zone device removal.
After thermal zone device removal, thermal zone device operations must
no longer be called. To prevent such calls from happening, ensure that
the thermal device is registered before executing any thermal device
operations.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
  • Loading branch information
Guenter Roeck authored and Rafael J. Wysocki committed Nov 14, 2022
1 parent 91b3aaf commit b778b4d
Showing 1 changed file with 11 additions and 1 deletion.
12 changes: 11 additions & 1 deletion drivers/thermal/thermal_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -203,6 +203,9 @@ int thermal_zone_device_set_policy(struct thermal_zone_device *tz,
mutex_lock(&thermal_governor_lock);
mutex_lock(&tz->lock);

if (!device_is_registered(&tz->device))
goto exit;

gov = __find_governor(strim(policy));
if (!gov)
goto exit;
Expand Down Expand Up @@ -445,6 +448,12 @@ static int thermal_zone_device_set_mode(struct thermal_zone_device *tz,
return ret;
}

if (!device_is_registered(&tz->device)) {
mutex_unlock(&tz->lock);

return -ENODEV;
}

if (tz->ops->change_mode)
ret = tz->ops->change_mode(tz, mode);

Expand Down Expand Up @@ -486,7 +495,8 @@ void thermal_zone_device_update(struct thermal_zone_device *tz,
enum thermal_notify_event event)
{
mutex_lock(&tz->lock);
__thermal_zone_device_update(tz, event);
if (device_is_registered(&tz->device))
__thermal_zone_device_update(tz, event);
mutex_unlock(&tz->lock);
}
EXPORT_SYMBOL_GPL(thermal_zone_device_update);
Expand Down

0 comments on commit b778b4d

Please sign in to comment.