From a0eef8d2e89ddd610bd8d8aa7511d444bd6590ca Mon Sep 17 00:00:00 2001 From: Vadim Yanitskiy Date: Mon, 16 Jul 2018 22:05:38 +0000 Subject: Revert "Move from libc random() to osmo_get_rand_id" It was decided to migrate to osmo_get_rand_id() and use random() as a fall-back. But there is a critical difference between both functions: osmo_get_rand_id() fills an input buffer with random bytes (0x00 - 0xff), while *random() returns a value in range between 0 and RAND_MAX. osmo_get_rand_id() was used in a wrong way, so in some cases we could get a negative value (how about IMEI starting from '-'?), what isn't expected in many cases and could lead to unexpected behaviour and segmentation faults... This reverts commit 6d49b049ee304f1ea0e4801df61e69713b01f0f8. Change-Id: I7b2a8a5c63cf64360a824926a2219fd7e419b1bb --- src/host/layer23/src/mobile/gsm322.c | 4 +--- src/host/layer23/src/mobile/gsm48_mm.c | 5 +---- src/host/layer23/src/mobile/gsm48_rr.c | 4 +--- src/host/layer23/src/mobile/settings.c | 10 ++-------- 4 files changed, 5 insertions(+), 18 deletions(-) (limited to 'src/host/layer23/src/mobile') diff --git a/src/host/layer23/src/mobile/gsm322.c b/src/host/layer23/src/mobile/gsm322.c index ce25cd57..c3485b6a 100644 --- a/src/host/layer23/src/mobile/gsm322.c +++ b/src/host/layer23/src/mobile/gsm322.c @@ -959,9 +959,7 @@ static int gsm322_sort_list(struct osmocom_ms *ms) entries++; } while(entries) { - if (osmo_get_rand_id((uint8_t *) &move, sizeof(move)) != 0) - move = random(); - move = move % entries; + move = random() % entries; i = 0; llist_for_each_entry(temp, &temp_list, entry) { if (rxlev2dbm(temp->rxlev) > -85) { diff --git a/src/host/layer23/src/mobile/gsm48_mm.c b/src/host/layer23/src/mobile/gsm48_mm.c index a36e7e86..a7af1f5c 100644 --- a/src/host/layer23/src/mobile/gsm48_mm.c +++ b/src/host/layer23/src/mobile/gsm48_mm.c @@ -30,7 +30,6 @@ #include #include #include -#include #include #include @@ -2100,9 +2099,7 @@ static int gsm48_mm_sysinfo(struct osmocom_ms *ms, struct msgb *msg) mm->t3212.timeout.tv_sec = current_time.tv_sec + (t % s->t3212); } else { - uint32_t rand; - if (osmo_get_rand_id((uint8_t *) &rand, sizeof(rand)) != 0) - rand = random(); + uint32_t rand = random(); LOGP(DMM, LOGL_INFO, "New T3212 while timer is not " "running (value %d)\n", s->t3212); diff --git a/src/host/layer23/src/mobile/gsm48_rr.c b/src/host/layer23/src/mobile/gsm48_rr.c index db2cb5ed..dd3fe933 100644 --- a/src/host/layer23/src/mobile/gsm48_rr.c +++ b/src/host/layer23/src/mobile/gsm48_rr.c @@ -71,7 +71,6 @@ #include #include #include -#include #include #include @@ -1629,8 +1628,7 @@ fail: } } - if (osmo_get_rand_id((uint8_t *) &chan_req, sizeof(chan_req)) != 0) - chan_req = random(); + chan_req = random(); chan_req &= rr->chan_req_mask; chan_req |= rr->chan_req_val; diff --git a/src/host/layer23/src/mobile/settings.c b/src/host/layer23/src/mobile/settings.c index 80b0b482..7370b0ab 100644 --- a/src/host/layer23/src/mobile/settings.c +++ b/src/host/layer23/src/mobile/settings.c @@ -23,7 +23,6 @@ #include #include #include -#include #include #include @@ -179,19 +178,14 @@ int gsm_random_imei(struct gsm_settings *set) { int digits = set->imei_random; char rand[16]; - long rand_num; if (digits <= 0) return 0; if (digits > 15) digits = 15; - if (osmo_get_rand_id((uint8_t *) &rand_num, sizeof(rand_num)) != 0) - rand_num = random(); - sprintf(rand, "%08ld", rand_num % 100000000); - if (osmo_get_rand_id((uint8_t *) &rand_num, sizeof(rand_num)) != 0) - rand_num = random(); - sprintf(rand + 8, "%07ld", rand_num % 10000000); + sprintf(rand, "%08ld", random() % 100000000); + sprintf(rand + 8, "%07ld", random() % 10000000); strcpy(set->imei + 15 - digits, rand + 15 - digits); strncpy(set->imeisv, set->imei, 15); -- cgit v1.2.3