mirror of
https://github.com/torvalds/linux.git
synced 2026-11-07 06:17:02 +01:00
hwmon: (coretemp) Set nr_cores only after core_data allocation succeeds
In init_temp_data(), pdata->nr_cores is populated from
topology_num_cores_per_package() before allocating pdata->core_data. If
that allocation fails, init_temp_data() returns NULL with
pdata->core_data still NULL and pdata->nr_cores set to a positive value.
coretemp_add_core() logs the error without failing coretemp_cpu_online(),
so the CPU still comes online with pdata->hwmon_dev registered. When the
CPU is later taken offline (or the module is unloaded),
coretemp_cpu_offline() calls get_temp_data(pd, cpu), which loops up to
pdata->nr_cores and dereferences the NULL pdata->core_data pointer.
Store the core count in a local variable and assign pdata->nr_cores only
after pdata->core_data is allocated, preserving the invariant that
pdata->nr_cores is zero whenever pdata->core_data is NULL.
Reported-by: Sashiko <sashiko-bot@kernel.org>
Fixes: 1a793caf6f ("hwmon: (coretemp) Use dynamic allocated memory for core temp_data")
Cc: stable@vger.kernel.org
Tested-by: Asaf Nuri Bertizlioğlu <ycistak@gmail.com>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
This commit is contained in:
parent
0f9c7ed3b5
commit
95638f1f05
|
|
@ -491,11 +491,12 @@ init_temp_data(struct platform_data *pdata, unsigned int cpu, int pkg_flag)
|
|||
struct temp_data *tdata;
|
||||
|
||||
if (!pdata->core_data) {
|
||||
pdata->nr_cores = topology_num_cores_per_package();
|
||||
pdata->core_data = kzalloc_objs(struct temp_data *,
|
||||
pdata->nr_cores);
|
||||
int nr_cores = topology_num_cores_per_package();
|
||||
|
||||
pdata->core_data = kzalloc_objs(struct temp_data *, nr_cores);
|
||||
if (!pdata->core_data)
|
||||
return NULL;
|
||||
pdata->nr_cores = nr_cores;
|
||||
}
|
||||
|
||||
tdata = kzalloc_obj(struct temp_data);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user