• Silas Boyd-Wickizer's avatar
    hwmon: (coretemp) Use get_online_cpus to avoid races involving CPU hotplug · 641f1456
    Silas Boyd-Wickizer authored
    coretemp_init loops with for_each_online_cpu, adding platform_devices
    and sysfs interfaces, then calls register_hotcpu_notifier.  There is a
    race if a CPU is offlined or onlined after the loop, but before
    register_hotcpu_notifier.  The race might result in the absence of a
    platform_device+sysfs interface for an online CPU, or the presence of
    a platform_device+sysfs interface for an offline CPU.  A similar race
    occurs during coretemp_exit, after the module calls
    unregister_hotcpu_notifier, but before it unregisters all devices, a
    CPU might offline and a device for an offline CPU will exist for a
    short while.
    
    This fix surrounds for_each_online_cpu and register_hotcpu_notifier
    with get_online_cpus+put_online_cpus; and surrounds
    unregister_hotcpu_notifier and device unregistering with
    get_online_cpus+put_online_cpus.
    
    Build tested.
    Signed-off-by: default avatarSilas Boyd-Wickizer <sbw@mit.edu>
    Signed-off-by: default avatarJean Delvare <khali@linux-fr.org>
    641f1456
coretemp.c 21.8 KB