diff options
Diffstat (limited to 'src/host/layer23/src/mobile/settings.c')
-rw-r--r-- | src/host/layer23/src/mobile/settings.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/host/layer23/src/mobile/settings.c b/src/host/layer23/src/mobile/settings.c index 7370b0ab..80b0b482 100644 --- a/src/host/layer23/src/mobile/settings.c +++ b/src/host/layer23/src/mobile/settings.c @@ -23,6 +23,7 @@ #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> @@ -178,14 +179,19 @@ 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; - sprintf(rand, "%08ld", random() % 100000000); - sprintf(rand + 8, "%07ld", random() % 10000000); + 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); strcpy(set->imei + 15 - digits, rand + 15 - digits); strncpy(set->imeisv, set->imei, 15); |