Commit 299d6e47 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'thermal-v5.15-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux

Pull thermal fixes from Daniel Lezcano:

 - Fix thermal shutdown after a suspend/resume due to a wrong TCC value
   restored on Intel platform (Antoine Tenart)

 - Fix potential buffer overflow when building the list of policies. The
   buffer size is not updated after writing to it (Dan Carpenter)

 - Fix wrong check against IS_ERR instead of NULL (Ansuel Smith)

* tag 'thermal-v5.15-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/thermal/linux:
  thermal/drivers/tsens: Fix wrong check for tzd in irq handlers
  thermal/core: Potential buffer overflow in thermal_build_list_of_policies()
  thermal/drivers/int340x: Do not set a wrong tcc offset on resume
parents 5bb7b210 cf969218
...@@ -107,7 +107,7 @@ static int tcc_offset_update(unsigned int tcc) ...@@ -107,7 +107,7 @@ static int tcc_offset_update(unsigned int tcc)
return 0; return 0;
} }
static unsigned int tcc_offset_save; static int tcc_offset_save = -1;
static ssize_t tcc_offset_degree_celsius_store(struct device *dev, static ssize_t tcc_offset_degree_celsius_store(struct device *dev,
struct device_attribute *attr, const char *buf, struct device_attribute *attr, const char *buf,
...@@ -352,6 +352,7 @@ int proc_thermal_resume(struct device *dev) ...@@ -352,6 +352,7 @@ int proc_thermal_resume(struct device *dev)
proc_dev = dev_get_drvdata(dev); proc_dev = dev_get_drvdata(dev);
proc_thermal_read_ppcc(proc_dev); proc_thermal_read_ppcc(proc_dev);
if (tcc_offset_save >= 0)
tcc_offset_update(tcc_offset_save); tcc_offset_update(tcc_offset_save);
return 0; return 0;
......
...@@ -417,7 +417,7 @@ static irqreturn_t tsens_critical_irq_thread(int irq, void *data) ...@@ -417,7 +417,7 @@ static irqreturn_t tsens_critical_irq_thread(int irq, void *data)
const struct tsens_sensor *s = &priv->sensor[i]; const struct tsens_sensor *s = &priv->sensor[i];
u32 hw_id = s->hw_id; u32 hw_id = s->hw_id;
if (IS_ERR(s->tzd)) if (!s->tzd)
continue; continue;
if (!tsens_threshold_violated(priv, hw_id, &d)) if (!tsens_threshold_violated(priv, hw_id, &d))
continue; continue;
...@@ -467,7 +467,7 @@ static irqreturn_t tsens_irq_thread(int irq, void *data) ...@@ -467,7 +467,7 @@ static irqreturn_t tsens_irq_thread(int irq, void *data)
const struct tsens_sensor *s = &priv->sensor[i]; const struct tsens_sensor *s = &priv->sensor[i];
u32 hw_id = s->hw_id; u32 hw_id = s->hw_id;
if (IS_ERR(s->tzd)) if (!s->tzd)
continue; continue;
if (!tsens_threshold_violated(priv, hw_id, &d)) if (!tsens_threshold_violated(priv, hw_id, &d))
continue; continue;
......
...@@ -222,15 +222,14 @@ int thermal_build_list_of_policies(char *buf) ...@@ -222,15 +222,14 @@ int thermal_build_list_of_policies(char *buf)
{ {
struct thermal_governor *pos; struct thermal_governor *pos;
ssize_t count = 0; ssize_t count = 0;
ssize_t size = PAGE_SIZE;
mutex_lock(&thermal_governor_lock); mutex_lock(&thermal_governor_lock);
list_for_each_entry(pos, &thermal_governor_list, governor_list) { list_for_each_entry(pos, &thermal_governor_list, governor_list) {
size = PAGE_SIZE - count; count += scnprintf(buf + count, PAGE_SIZE - count, "%s ",
count += scnprintf(buf + count, size, "%s ", pos->name); pos->name);
} }
count += scnprintf(buf + count, size, "\n"); count += scnprintf(buf + count, PAGE_SIZE - count, "\n");
mutex_unlock(&thermal_governor_lock); mutex_unlock(&thermal_governor_lock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment