From 351fc43207a85dbb53ca087d5d4da75f7f061b19 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 17 Aug 2020 14:06:34 +0200 Subject: [PATCH] 4.19-stable patches added patches: cpufreq-dt-fix-oops-on-armada37xx.patch --- .../cpufreq-dt-fix-oops-on-armada37xx.patch | 48 +++++++++++++++++++ queue-4.19/series | 1 + 2 files changed, 49 insertions(+) create mode 100644 queue-4.19/cpufreq-dt-fix-oops-on-armada37xx.patch diff --git a/queue-4.19/cpufreq-dt-fix-oops-on-armada37xx.patch b/queue-4.19/cpufreq-dt-fix-oops-on-armada37xx.patch new file mode 100644 index 00000000000..7b901b26637 --- /dev/null +++ b/queue-4.19/cpufreq-dt-fix-oops-on-armada37xx.patch @@ -0,0 +1,48 @@ +From 10470dec3decaf5ed3c596f85debd7c42777ae12 Mon Sep 17 00:00:00 2001 +From: Ivan Kokshaysky +Date: Sat, 20 Jun 2020 17:44:49 +0100 +Subject: cpufreq: dt: fix oops on armada37xx + +From: Ivan Kokshaysky + +commit 10470dec3decaf5ed3c596f85debd7c42777ae12 upstream. + +Commit 0c868627e617e43a295d8 (cpufreq: dt: Allow platform specific +intermediate callbacks) added two function pointers to the +struct cpufreq_dt_platform_data. However, armada37xx_cpufreq_driver_init() +has this struct (pdata) located on the stack and uses only "suspend" +and "resume" fields. So these newly added "get_intermediate" and +"target_intermediate" pointers are uninitialized and contain arbitrary +non-null values, causing all kinds of trouble. + +For instance, here is an oops on espressobin after an attempt to change +the cpefreq governor: + +[ 29.174554] Unable to handle kernel execute from non-executable memory at virtual address ffff00003f87bdc0 +... +[ 29.269373] pc : 0xffff00003f87bdc0 +[ 29.272957] lr : __cpufreq_driver_target+0x138/0x580 +... + +Fixed by zeroing out pdata before use. + +Cc: # v5.7+ +Signed-off-by: Ivan Kokshaysky +Reviewed-by: Andrew Lunn +Signed-off-by: Viresh Kumar +Signed-off-by: Greg Kroah-Hartman + +--- + drivers/cpufreq/armada-37xx-cpufreq.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/drivers/cpufreq/armada-37xx-cpufreq.c ++++ b/drivers/cpufreq/armada-37xx-cpufreq.c +@@ -458,6 +458,7 @@ static int __init armada37xx_cpufreq_dri + /* Now that everything is setup, enable the DVFS at hardware level */ + armada37xx_cpufreq_enable_dvfs(nb_pm_base); + ++ memset(&pdata, 0, sizeof(pdata)); + pdata.suspend = armada37xx_cpufreq_suspend; + pdata.resume = armada37xx_cpufreq_resume; + diff --git a/queue-4.19/series b/queue-4.19/series index 45b690f8dcd..bddad772b73 100644 --- a/queue-4.19/series +++ b/queue-4.19/series @@ -155,3 +155,4 @@ alsa-usb-audio-add-quirk-for-pioneer-ddj-rb.patch drm-ttm-nouveau-don-t-call-tt-destroy-callback-on-alloc-failure.patch nfs-don-t-move-layouts-to-plh_return_segs-list-while-in-use.patch nfs-don-t-return-layout-segments-that-are-in-use.patch +cpufreq-dt-fix-oops-on-armada37xx.patch -- 2.47.3