<p>Holger Freyther <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/9914">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Holger Freyther: Looks good to me, approved
  Vadim Yanitskiy: Looks good to me, but someone else must approve
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Move from libc random() to osmo_get_rand_id<br><br>When starting multiple mobile in the same second, the libc random number<br>generator will be seeded to exactly the same value.<br><br>The random bits inside the RACH request(s) will be exactly the same<br>across multiple mobile and when the channel fails they all pick the same<br>randomized back-off timing.<br><br>Use stronger random numbers and replace all calls to random(2) with<br>osmo_get_rand_id. Add a fallback to try random().<br><br>Change-Id: Ie0cc64663cd4b90c027b79545dc5d3ac9d87b9dd<br>---<br>M src/host/layer23/src/mobile/gsm322.c<br>M src/host/layer23/src/mobile/gsm48_mm.c<br>M src/host/layer23/src/mobile/gsm48_rr.c<br>M src/host/layer23/src/mobile/settings.c<br>4 files changed, 18 insertions(+), 5 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/host/layer23/src/mobile/gsm322.c b/src/host/layer23/src/mobile/gsm322.c</span><br><span>index c3485b6..ce25cd5 100644</span><br><span>--- a/src/host/layer23/src/mobile/gsm322.c</span><br><span>+++ b/src/host/layer23/src/mobile/gsm322.c</span><br><span>@@ -959,7 +959,9 @@</span><br><span>                       entries++;</span><br><span>   }</span><br><span>    while(entries) {</span><br><span style="color: hsl(0, 100%, 40%);">-                move = random() % entries;</span><br><span style="color: hsl(120, 100%, 40%);">+            if (osmo_get_rand_id((uint8_t *) &move, sizeof(move)) != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                       move = random();</span><br><span style="color: hsl(120, 100%, 40%);">+              move = move % entries;</span><br><span>               i = 0;</span><br><span>               llist_for_each_entry(temp, &temp_list, entry) {</span><br><span>                  if (rxlev2dbm(temp->rxlev) > -85) {</span><br><span>diff --git a/src/host/layer23/src/mobile/gsm48_mm.c b/src/host/layer23/src/mobile/gsm48_mm.c</span><br><span>index a7af1f5..a36e7e8 100644</span><br><span>--- a/src/host/layer23/src/mobile/gsm48_mm.c</span><br><span>+++ b/src/host/layer23/src/mobile/gsm48_mm.c</span><br><span>@@ -30,6 +30,7 @@</span><br><span> #include <osmocom/core/utils.h></span><br><span> #include <osmocom/gsm/gsm48.h></span><br><span> #include <osmocom/core/talloc.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/gsm_utils.h></span><br><span> </span><br><span> #include <osmocom/bb/common/logging.h></span><br><span> #include <osmocom/bb/common/osmocom_data.h></span><br><span>@@ -2099,7 +2100,9 @@</span><br><span>                     mm->t3212.timeout.tv_sec = current_time.tv_sec</span><br><span>                            + (t % s->t3212);</span><br><span>                 } else {</span><br><span style="color: hsl(0, 100%, 40%);">-                        uint32_t rand = random();</span><br><span style="color: hsl(120, 100%, 40%);">+                     uint32_t rand;</span><br><span style="color: hsl(120, 100%, 40%);">+                        if (osmo_get_rand_id((uint8_t *) &rand, sizeof(rand)) != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+                               rand = random();</span><br><span> </span><br><span>                         LOGP(DMM, LOGL_INFO, "New T3212 while timer is not "</span><br><span>                               "running (value %d)\n", s->t3212);</span><br><span>diff --git a/src/host/layer23/src/mobile/gsm48_rr.c b/src/host/layer23/src/mobile/gsm48_rr.c</span><br><span>index dd3fe93..db2cb5e 100644</span><br><span>--- a/src/host/layer23/src/mobile/gsm48_rr.c</span><br><span>+++ b/src/host/layer23/src/mobile/gsm48_rr.c</span><br><span>@@ -71,6 +71,7 @@</span><br><span> #include <osmocom/gsm/rsl.h></span><br><span> #include <osmocom/gsm/gsm48.h></span><br><span> #include <osmocom/core/bitvec.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/gsm_utils.h></span><br><span> </span><br><span> #include <osmocom/bb/common/osmocom_data.h></span><br><span> #include <osmocom/bb/common/l1l2_interface.h></span><br><span>@@ -1628,7 +1629,8 @@</span><br><span>           }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   chan_req = random();</span><br><span style="color: hsl(120, 100%, 40%);">+  if (osmo_get_rand_id((uint8_t *) &chan_req, sizeof(chan_req)) != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+               chan_req = random();</span><br><span>         chan_req &= rr->chan_req_mask;</span><br><span>        chan_req |= rr->chan_req_val;</span><br><span> </span><br><span>diff --git a/src/host/layer23/src/mobile/settings.c b/src/host/layer23/src/mobile/settings.c</span><br><span>index 7370b0a..80b0b48 100644</span><br><span>--- a/src/host/layer23/src/mobile/settings.c</span><br><span>+++ b/src/host/layer23/src/mobile/settings.c</span><br><span>@@ -23,6 +23,7 @@</span><br><span> #include <errno.h></span><br><span> #include <string.h></span><br><span> #include <osmocom/core/talloc.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/gsm/gsm_utils.h></span><br><span> </span><br><span> #include <osmocom/bb/mobile/app_mobile.h></span><br><span> #include <osmocom/bb/common/logging.h></span><br><span>@@ -178,14 +179,19 @@</span><br><span> {</span><br><span>       int digits = set->imei_random;</span><br><span>    char rand[16];</span><br><span style="color: hsl(120, 100%, 40%);">+        long rand_num;</span><br><span> </span><br><span>   if (digits <= 0)</span><br><span>          return 0;</span><br><span>    if (digits > 15)</span><br><span>          digits = 15;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        sprintf(rand, "%08ld", random() % 100000000);</span><br><span style="color: hsl(0, 100%, 40%);">- sprintf(rand + 8, "%07ld", random() % 10000000);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (osmo_get_rand_id((uint8_t *) &rand_num, sizeof(rand_num)) != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+               rand_num = random();</span><br><span style="color: hsl(120, 100%, 40%);">+  sprintf(rand, "%08ld", rand_num % 100000000);</span><br><span style="color: hsl(120, 100%, 40%);">+       if (osmo_get_rand_id((uint8_t *) &rand_num, sizeof(rand_num)) != 0)</span><br><span style="color: hsl(120, 100%, 40%);">+               rand_num = random();</span><br><span style="color: hsl(120, 100%, 40%);">+  sprintf(rand + 8, "%07ld", rand_num % 10000000);</span><br><span> </span><br><span>       strcpy(set->imei + 15 - digits, rand + 15 - digits);</span><br><span>      strncpy(set->imeisv, set->imei, 15);</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/9914">change 9914</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/9914"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmocom-bb </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: Ie0cc64663cd4b90c027b79545dc5d3ac9d87b9dd </div>
<div style="display:none"> Gerrit-Change-Number: 9914 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: Holger Freyther <holger@freyther.de> </div>
<div style="display:none"> Gerrit-Reviewer: Holger Freyther <holger@freyther.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: Vadim Yanitskiy <axilirator@gmail.com> </div>