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 6d49b049ee
.
Change-Id: I7b2a8a5c63cf64360a824926a2219fd7e419b1bb
This commit is contained in:
parent
70a50a33cc
commit
a0eef8d2e8
|
@ -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) {
|
||||
|
|
|
@ -30,7 +30,6 @@
|
|||
#include <osmocom/core/utils.h>
|
||||
#include <osmocom/gsm/gsm48.h>
|
||||
#include <osmocom/core/talloc.h>
|
||||
#include <osmocom/gsm/gsm_utils.h>
|
||||
|
||||
#include <osmocom/bb/common/logging.h>
|
||||
#include <osmocom/bb/common/osmocom_data.h>
|
||||
|
@ -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);
|
||||
|
|
|
@ -71,7 +71,6 @@
|
|||
#include <osmocom/gsm/rsl.h>
|
||||
#include <osmocom/gsm/gsm48.h>
|
||||
#include <osmocom/core/bitvec.h>
|
||||
#include <osmocom/gsm/gsm_utils.h>
|
||||
|
||||
#include <osmocom/bb/common/osmocom_data.h>
|
||||
#include <osmocom/bb/common/l1l2_interface.h>
|
||||
|
@ -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;
|
||||
|
||||
|
|
|
@ -23,7 +23,6 @@
|
|||
#include <errno.h>
|
||||
#include <string.h>
|
||||
#include <osmocom/core/talloc.h>
|
||||
#include <osmocom/gsm/gsm_utils.h>
|
||||
|
||||
#include <osmocom/bb/mobile/app_mobile.h>
|
||||
#include <osmocom/bb/common/logging.h>
|
||||
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue