diff mbox series

[V2] cpufreq: scmi: Avoid overflow of target_freq in fast switch

Message ID 20240520063732.11220-1-quic_jkona@quicinc.com
State Accepted
Commit 074cffb5020ddcaa5fafcc55655e5da6ebe8c831
Headers show
Series [V2] cpufreq: scmi: Avoid overflow of target_freq in fast switch | expand

Commit Message

Jagadeesh Kona May 20, 2024, 6:37 a.m. UTC
Conversion of target_freq to HZ in scmi_cpufreq_fast_switch()
can lead to overflow if the multiplied result is greater than
UINT_MAX, since type of target_freq is unsigned int. Avoid this
overflow by assigning target_freq to unsigned long variable for
converting it to HZ.

Signed-off-by: Jagadeesh Kona <quic_jkona@quicinc.com>
---
Changes in V2:
  - Updated freq variable from u64 to unsigned long to keep it
    consistent with the rate parameter in scmi .freq_set() callback
  - Link to v1: https://lore.kernel.org/all/20240517070157.19553-1-quic_jkona@quicinc.com/
---
 drivers/cpufreq/scmi-cpufreq.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Jagadeesh Kona May 27, 2024, 9:56 a.m. UTC | #1
On 5/20/2024 2:17 PM, Viresh Kumar wrote:
> On 20-05-24, 12:07, Jagadeesh Kona wrote:
>> Conversion of target_freq to HZ in scmi_cpufreq_fast_switch()
>> can lead to overflow if the multiplied result is greater than
>> UINT_MAX, since type of target_freq is unsigned int. Avoid this
>> overflow by assigning target_freq to unsigned long variable for
>> converting it to HZ.
>>
>> Signed-off-by: Jagadeesh Kona <quic_jkona@quicinc.com>
>> ---
>> Changes in V2:
>>    - Updated freq variable from u64 to unsigned long to keep it
>>      consistent with the rate parameter in scmi .freq_set() callback
>>    - Link to v1: https://lore.kernel.org/all/20240517070157.19553-1-quic_jkona@quicinc.com/
>> ---
>>   drivers/cpufreq/scmi-cpufreq.c | 4 ++--
>>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> Applied. Thanks.
> 

Thanks Viresh for the offline update on applying this patch to cpufreq 
arm tree. Please help share the git tree details of the same, since we 
need them to pick this change in Google ACK and downstream tree.

Thanks,
Jagadeesh
Viresh Kumar May 28, 2024, 4:03 a.m. UTC | #2
On 27-05-24, 15:26, Jagadeesh Kona wrote:
> 
> 
> On 5/20/2024 2:17 PM, Viresh Kumar wrote:
> > On 20-05-24, 12:07, Jagadeesh Kona wrote:
> > > Conversion of target_freq to HZ in scmi_cpufreq_fast_switch()
> > > can lead to overflow if the multiplied result is greater than
> > > UINT_MAX, since type of target_freq is unsigned int. Avoid this
> > > overflow by assigning target_freq to unsigned long variable for
> > > converting it to HZ.
> > > 
> > > Signed-off-by: Jagadeesh Kona <quic_jkona@quicinc.com>
> > > ---
> > > Changes in V2:
> > >    - Updated freq variable from u64 to unsigned long to keep it
> > >      consistent with the rate parameter in scmi .freq_set() callback
> > >    - Link to v1: https://lore.kernel.org/all/20240517070157.19553-1-quic_jkona@quicinc.com/
> > > ---
> > >   drivers/cpufreq/scmi-cpufreq.c | 4 ++--
> > >   1 file changed, 2 insertions(+), 2 deletions(-)
> > 
> > Applied. Thanks.
> > 
> 
> Thanks Viresh for the offline update on applying this patch to cpufreq arm
> tree. Please help share the git tree details of the same, since we need them
> to pick this change in Google ACK and downstream tree.

git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm.git cpufreq/arm/linux-next

I have pushed it out now, it will be there in linux-next soon. My
branch is not fixed, I may end up rebasing it. Ideally, you shouldn't
backport anything to android unless it end ups in Linus's tree, only
then the sha id will be fixed and guaranteed not to change.
diff mbox series

Patch

diff --git a/drivers/cpufreq/scmi-cpufreq.c b/drivers/cpufreq/scmi-cpufreq.c
index 3b4f6bfb2f4c..b87fd127aa43 100644
--- a/drivers/cpufreq/scmi-cpufreq.c
+++ b/drivers/cpufreq/scmi-cpufreq.c
@@ -63,9 +63,9 @@  static unsigned int scmi_cpufreq_fast_switch(struct cpufreq_policy *policy,
 					     unsigned int target_freq)
 {
 	struct scmi_data *priv = policy->driver_data;
+	unsigned long freq = target_freq;
 
-	if (!perf_ops->freq_set(ph, priv->domain_id,
-				target_freq * 1000, true))
+	if (!perf_ops->freq_set(ph, priv->domain_id, freq * 1000, true))
 		return target_freq;
 
 	return 0;