Skip to content

Commit 96d529b

Browse files
sudeep-hollaolofj
authored andcommitted
firmware: arm_scmi: fix divide by zero when sustained_perf_level is zero
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: a9e3fbf ("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>
1 parent a72b44a commit 96d529b

File tree

1 file changed

+7
-1
lines changed
  • drivers/firmware/arm_scmi

1 file changed

+7
-1
lines changed

drivers/firmware/arm_scmi/perf.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,13 @@ scmi_perf_domain_attributes_get(const struct scmi_handle *handle, u32 domain,
166166
le32_to_cpu(attr->sustained_freq_khz);
167167
dom_info->sustained_perf_level =
168168
le32_to_cpu(attr->sustained_perf_level);
169-
dom_info->mult_factor = (dom_info->sustained_freq_khz * 1000) /
169+
if (!dom_info->sustained_freq_khz ||
170+
!dom_info->sustained_perf_level)
171+
/* CPUFreq converts to kHz, hence default 1000 */
172+
dom_info->mult_factor = 1000;
173+
else
174+
dom_info->mult_factor =
175+
(dom_info->sustained_freq_khz * 1000) /
170176
dom_info->sustained_perf_level;
171177
memcpy(dom_info->name, attr->name, SCMI_MAX_STR_SIZE);
172178
}

0 commit comments

Comments
 (0)