aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc
diff options
context:
space:
mode:
authorHarald Welte <laforge@netfilter.org>2009-12-12 14:21:16 +0100
committerHarald Welte <laforge@netfilter.org>2009-12-12 14:21:16 +0100
commit854b9b33afc1b9719ef91624fbb1f4861bfdc1f1 (patch)
treecb7d85a164a2b3bd557e77fb0fe13bb12b5db1e2 /openbsc
parent49685d7bdda3a2df1f001c06ee1d4cd47e6a4fdf (diff)
fix some integer underflows in MS power calculation
Diffstat (limited to 'openbsc')
-rw-r--r--openbsc/src/gsm_utils.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/openbsc/src/gsm_utils.c b/openbsc/src/gsm_utils.c
index ddfd7f3de..fe0b496bf 100644
--- a/openbsc/src/gsm_utils.c
+++ b/openbsc/src/gsm_utils.c
@@ -90,8 +90,10 @@ int ms_pwr_ctl_lvl(enum gsm_band band, unsigned int dbm)
return 0;
else if (dbm < 5)
return 19;
- else
+ else {
+ /* we are guaranteed to have (5 <= dbm < 39) */
return 2 + ((39 - dbm) / 2);
+ }
break;
case GSM_BAND_1800:
if (dbm >= 36)
@@ -100,16 +102,24 @@ int ms_pwr_ctl_lvl(enum gsm_band band, unsigned int dbm)
return 30;
else if (dbm >= 32)
return 31;
- else
+ else if (dbm == 31)
+ return 0;
+ else {
+ /* we are guaranteed to have (0 <= dbm < 31) */
return (30 - dbm) / 2;
+ }
break;
case GSM_BAND_1900:
if (dbm >= 33)
return 30;
else if (dbm >= 32)
return 31;
- else
+ else if (dbm == 31)
+ return 0;
+ else {
+ /* we are guaranteed to have (0 <= dbm < 31) */
return (30 - dbm) / 2;
+ }
break;
}
return -EINVAL;