On 17/11/2020 08:18, Zhang Rui wrote: > On Mon, 2020-11-16 at 21:59 +0530, Mukesh Ojha wrote: >> Cooling stats variable inside thermal_cooling_device_stats_update() >> can get NULL. We should add a NULL check on stat inside for sanity. >> >> Signed-off-by: Mukesh Ojha <mo...@codeaurora.org> >> --- >> drivers/thermal/thermal_sysfs.c | 3 +++ >> 1 file changed, 3 insertions(+) >> >> diff --git a/drivers/thermal/thermal_sysfs.c >> b/drivers/thermal/thermal_sysfs.c >> index a6f371f..f52708f 100644 >> --- a/drivers/thermal/thermal_sysfs.c >> +++ b/drivers/thermal/thermal_sysfs.c >> @@ -754,6 +754,9 @@ void thermal_cooling_device_stats_update(struct >> thermal_cooling_device *cdev, >> { >> struct cooling_dev_stats *stats = cdev->stats; >> >> + if (!stats) >> + return; >> + > May I know in which case stats can be NULL? > The only possibility I can see is that cdev->ops->get_max_state() fails > in cooling_device_stats_setup(), right?
A few lines below, the allocation could fail. stats = kzalloc(var, GFP_KERNEL); if (!stats) return; Some drivers define themselves as a cooling device state to let the userspace to act on their power. The screen brightness is one example with a cdev with 1024 states, the resulting stats table to be allocated is very big and the kzalloc is prone to fail. > thanks, > rui > >> spin_lock(&stats->lock); >> >> if (stats->state == new_state) > -- <http://www.linaro.org/> Linaro.org │ Open source software for ARM SoCs Follow Linaro: <http://www.facebook.com/pages/Linaro> Facebook | <http://twitter.com/#!/linaroorg> Twitter | <http://www.linaro.org/linaro-blog/> Blog