• Ivan Kokshaysky's avatar
    cpufreq: dt: fix oops on armada37xx · 10470dec
    Ivan Kokshaysky authored
    Commit 0c868627 (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: <stable@vger.kernel.org> # v5.7+
    Signed-off-by: default avatarIvan Kokshaysky <ink@jurassic.park.msu.ru>
    Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
    Signed-off-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
    10470dec
armada-37xx-cpufreq.c 13.6 KB