lkml.org 
[lkml]   [2018]   [Oct]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.18 075/168] firmware: arm_scmi: fix divide by zero when sustained_perf_level is zero
    Date
    4.18-stable review patch.  If anyone has any objections, please let me know.

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

    From: Sudeep Holla <sudeep.holla@arm.com>

    [ Upstream commit 96d529bac562574600eda85726fcfa3eef6dde8e ]

    Firmware can provide zero as values for sustained performance level and
    corresponding sustained frequency in kHz in order to hide the actual
    frequencies and provide only abstract values. It may endup with divide
    by zero scenario resulting in kernel panic.

    Let's set the multiplication factor to one if either one or both of them
    (sustained_perf_level and sustained_freq) are set to zero.

    Fixes: a9e3fbfaa0ff ("firmware: arm_scmi: add initial support for performance protocol")
    Reported-by: Ionela Voinescu <ionela.voinescu@arm.com>
    Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
    Signed-off-by: Olof Johansson <olof@lixom.net>
    Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    drivers/firmware/arm_scmi/perf.c | 8 +++++++-
    1 file changed, 7 insertions(+), 1 deletion(-)

    --- a/drivers/firmware/arm_scmi/perf.c
    +++ b/drivers/firmware/arm_scmi/perf.c
    @@ -166,7 +166,13 @@ scmi_perf_domain_attributes_get(const st
    le32_to_cpu(attr->sustained_freq_khz);
    dom_info->sustained_perf_level =
    le32_to_cpu(attr->sustained_perf_level);
    - dom_info->mult_factor = (dom_info->sustained_freq_khz * 1000) /
    + if (!dom_info->sustained_freq_khz ||
    + !dom_info->sustained_perf_level)
    + /* CPUFreq converts to kHz, hence default 1000 */
    + dom_info->mult_factor = 1000;
    + else
    + dom_info->mult_factor =
    + (dom_info->sustained_freq_khz * 1000) /
    dom_info->sustained_perf_level;
    memcpy(dom_info->name, attr->name, SCMI_MAX_STR_SIZE);
    }

    \
     
     \ /
      Last update: 2018-10-08 21:00    [W:8.459 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site