lkml.org 
[lkml]   [2018]   [Sep]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.18 087/145] cpufreq: governor: Avoid accessing invalid governor_data
    Date
    4.18-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Henry Willard <henry.willard@oracle.com>

    commit 2a3eb51e30b9ac66fe1b75877627a7e4aaeca24a upstream.

    If cppc_cpufreq.ko is deleted at the same time that tuned-adm is
    changing profiles, there is a small chance that a race can occur
    between cpufreq_dbs_governor_exit() and cpufreq_dbs_governor_limits()
    resulting in a system failure when the latter tries to use
    policy->governor_data that has been freed by the former.

    This patch uses gov_dbs_data_mutex to synchronize access.

    Fixes: e788892ba3cc (cpufreq: governor: Get rid of governor events)
    Signed-off-by: Henry Willard <henry.willard@oracle.com>
    [ rjw: Subject, minor white space adjustment ]
    Cc: 4.8+ <stable@vger.kernel.org> # 4.8+
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    drivers/cpufreq/cpufreq_governor.c | 12 ++++++++++--
    1 file changed, 10 insertions(+), 2 deletions(-)

    --- a/drivers/cpufreq/cpufreq_governor.c
    +++ b/drivers/cpufreq/cpufreq_governor.c
    @@ -555,12 +555,20 @@ EXPORT_SYMBOL_GPL(cpufreq_dbs_governor_s

    void cpufreq_dbs_governor_limits(struct cpufreq_policy *policy)
    {
    - struct policy_dbs_info *policy_dbs = policy->governor_data;
    + struct policy_dbs_info *policy_dbs;
    +
    + /* Protect gov->gdbs_data against cpufreq_dbs_governor_exit() */
    + mutex_lock(&gov_dbs_data_mutex);
    + policy_dbs = policy->governor_data;
    + if (!policy_dbs)
    + goto out;

    mutex_lock(&policy_dbs->update_mutex);
    cpufreq_policy_apply_limits(policy);
    gov_update_sample_delay(policy_dbs, 0);
    -
    mutex_unlock(&policy_dbs->update_mutex);
    +
    +out:
    + mutex_unlock(&gov_dbs_data_mutex);
    }
    EXPORT_SYMBOL_GPL(cpufreq_dbs_governor_limits);

    \
     
     \ /
      Last update: 2018-09-07 23:18    [W:4.078 / U:0.120 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site