hwmon: Handle failure to register sensor with thermal zone correctly
commit
1b5f517cca36292076d9e38fa6e33a257703e62e upstream.
If an attempt is made to a sensor with a thermal zone and it fails,
the call to devm_thermal_zone_of_sensor_register() may return -ENODEV.
This may result in crashes similar to the following.
Unable to handle kernel NULL pointer dereference at virtual address
00000000000003cd
...
Internal error: Oops:
96000021 [#1] PREEMPT SMP
...
pstate:
60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--)
pc : mutex_lock+0x18/0x60
lr : thermal_zone_device_update+0x40/0x2e0
sp :
ffff800014c4fc60
x29:
ffff800014c4fc60 x28:
ffff365ee3f6e000 x27:
ffffdde218426790
x26:
ffff365ee3f6e000 x25:
0000000000000000 x24:
ffff365ee3f6e000
x23:
ffffdde218426870 x22:
ffff365ee3f6e000 x21:
00000000000003cd
x20:
ffff365ee8bf3308 x19:
ffffffffffffffed x18:
0000000000000000
x17:
ffffdde21842689c x16:
ffffdde1cb7a0b7c x15:
0000000000000040
x14:
ffffdde21a4889a0 x13:
0000000000000228 x12:
0000000000000000
x11:
0000000000000000 x10:
0000000000000000 x9 :
0000000000000000
x8 :
0000000001120000 x7 :
0000000000000001 x6 :
0000000000000000
x5 :
0068000878e20f07 x4 :
0000000000000000 x3 :
00000000000003cd
x2 :
ffff365ee3f6e000 x1 :
0000000000000000 x0 :
00000000000003cd
Call trace:
mutex_lock+0x18/0x60
hwmon_notify_event+0xfc/0x110
0xffffdde1cb7a0a90
0xffffdde1cb7a0b7c
irq_thread_fn+0x2c/0xa0
irq_thread+0x134/0x240
kthread+0x178/0x190
ret_from_fork+0x10/0x20
Code:
d503201f d503201f d2800001 aa0103e4 (
c8e47c02)
Jon Hunter reports that the exact call sequence is:
hwmon_notify_event()
--> hwmon_thermal_notify()
--> thermal_zone_device_update()
--> update_temperature()
--> mutex_lock()
The hwmon core needs to handle all errors returned from calls
to devm_thermal_zone_of_sensor_register(). If the call fails
with -ENODEV, report that the sensor was not attached to a
thermal zone but continue to register the hwmon device.
Reported-by: Jon Hunter <jonathanh@nvidia.com>
Cc: Dmitry Osipenko <digetx@gmail.com>
Fixes:
1597b374af222 ("hwmon: Add notification support")
Reviewed-by: Dmitry Osipenko <dmitry.osipenko@collabora.com>
Tested-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>