x86/mce/therm_throt: Do not access uninitialized therm_work
authorChuansheng Liu <chuansheng.liu@intel.com>
Tue, 7 Jan 2020 00:41:16 +0000 (00:41 +0000)
committerBorislav Petkov <bp@suse.de>
Wed, 15 Jan 2020 10:31:33 +0000 (11:31 +0100)
commit978370956d2046b19313659ce65ed12d5b996626
tree45889e860a424843a3bb3dd2b8e6d26e5e3551e0
parentb3a987b0264d3ddbb24293ebff10eddfc472f653
x86/mce/therm_throt: Do not access uninitialized therm_work

It is relatively easy to trigger the following boot splat on an Ice Lake
client platform. The call stack is like:

  kernel BUG at kernel/timer/timer.c:1152!

  Call Trace:
  __queue_delayed_work
  queue_delayed_work_on
  therm_throt_process
  intel_thermal_interrupt
  ...

The reason is that a CPU's thermal interrupt is enabled prior to
executing its hotplug onlining callback which will initialize the
throttling workqueues.

Such a race can lead to therm_throt_process() accessing an uninitialized
therm_work, leading to the above BUG at a very early bootup stage.

Therefore, unmask the thermal interrupt vector only after having setup
the workqueues completely.

 [ bp: Heavily massage commit message and correct comment formatting. ]

Fixes: f6656208f04e ("x86/mce/therm_throt: Optimize notifications of thermal throttle")
Signed-off-by: Chuansheng Liu <chuansheng.liu@intel.com>
Signed-off-by: Borislav Petkov <bp@suse.de>
Acked-by: Tony Luck <tony.luck@intel.com>
Link: https://lkml.kernel.org/r/20200107004116.59353-1-chuansheng.liu@intel.com
arch/x86/kernel/cpu/mce/therm_throt.c