mirror of
https://github.com/hardkernel/linux.git
synced 2026-03-27 21:10:28 +09:00
cpufreq: powernv: Fix use-after-free
commitd0a72efac8upstream. The cpufreq driver has a use-after-free that we can hit if: a) There's an OCC message pending when the notifier is registered, and b) The cpufreq driver fails to register with the core. When a) occurs the notifier schedules a workqueue item to handle the message. The backing work_struct is located on chips[].throttle and when b) happens we clean up by freeing the array. Once we get to the (now free) queued item and the kernel crashes. Fixes:c5e29ea7ac("cpufreq: powernv: Fix bugs in powernv_cpufreq_{init/exit}") Cc: stable@vger.kernel.org # v4.6+ Signed-off-by: Oliver O'Halloran <oohall@gmail.com> Reviewed-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20200206062622.28235-1-oohall@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
2a87b491b7
commit
35e68aef65
@@ -1081,6 +1081,12 @@ free_and_return:
|
||||
|
||||
static inline void clean_chip_info(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
/* flush any pending work items */
|
||||
if (chips)
|
||||
for (i = 0; i < nr_chips; i++)
|
||||
cancel_work_sync(&chips[i].throttle);
|
||||
kfree(chips);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user