Module Name: src
Committed By: msaitoh
Date: Thu May 20 01:07:24 UTC 2021
Modified Files:
src/sys/arch/arm/rockchip: rk3399_cru.c
Log Message:
Fix signed integer overflow found by kUBSan. OK'd by jmcneill.
The output was:
UBSan: Undefined Behavior in ../../../../arch/arm/rockchip/rk3399_cru.c:
284:13, signed integer overflow: 594000000 - -2086967296 cannot be
represented in type 'int'
To generate a diff of this commit:
cvs rdiff -u -r1.21 -r1.22 src/sys/arch/arm/rockchip/rk3399_cru.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/arm/rockchip/rk3399_cru.c
diff -u src/sys/arch/arm/rockchip/rk3399_cru.c:1.21 src/sys/arch/arm/rockchip/rk3399_cru.c:1.22
--- src/sys/arch/arm/rockchip/rk3399_cru.c:1.21 Wed Jan 27 03:10:19 2021
+++ src/sys/arch/arm/rockchip/rk3399_cru.c Thu May 20 01:07:24 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: rk3399_cru.c,v 1.21 2021/01/27 03:10:19 thorpej Exp $ */
+/* $NetBSD: rk3399_cru.c,v 1.22 2021/05/20 01:07:24 msaitoh Exp $ */
/*-
* Copyright (c) 2018 Jared McNeill <[email protected]>
@@ -28,7 +28,7 @@
#include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.21 2021/01/27 03:10:19 thorpej Exp $");
+__KERNEL_RCSID(1, "$NetBSD: rk3399_cru.c,v 1.22 2021/05/20 01:07:24 msaitoh Exp $");
#include <sys/param.h>
#include <sys/bus.h>
@@ -281,10 +281,15 @@ rk3399_cru_pll_set_rate(struct rk_cru_so
best_diff = INT_MAX;
for (int i = 0; i < pll->nrates; i++) {
- const int diff = (int)rate - (int)pll->rates[i].rate;
- if (abs(diff) < best_diff) {
+ int diff;
+
+ if (rate > pll->rates[i].rate)
+ diff = rate - pll->rates[i].rate;
+ else
+ diff = pll->rates[i].rate - rate;
+ if (diff < best_diff) {
pll_rate = &pll->rates[i];
- best_diff = abs(diff);
+ best_diff = diff;
}
}