<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/9739">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Harald Welte: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">VLR: reject overlong IMSIs in ID RESP messages<br><br>Overlong IMSIs in ID RESP messages were accepted and used in<br>truncated form.<br><br>Log an error when truncation occurs, and prevent truncated IMSIs<br>from being installed for a subscriber via ID RESP messages.<br>Other code paths leading to vlr_subscr_set_imsi() with truncated<br>IMSIs will only a leave a trail of log entries for now, because<br>vlr_subscr_set_imsi() is currently unable to return an error code.<br><br>Change-Id: I785c994f41a646d8d83d3d82f5a9ae6b572eb641<br>Related: OS#2864<br>---<br>M src/libvlr/vlr.c<br>1 file changed, 13 insertions(+), 2 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/libvlr/vlr.c b/src/libvlr/vlr.c</span><br><span>index 29098b1..cff2e12 100644</span><br><span>--- a/src/libvlr/vlr.c</span><br><span>+++ b/src/libvlr/vlr.c</span><br><span>@@ -396,7 +396,13 @@</span><br><span> {</span><br><span>       if (!vsub)</span><br><span>           return;</span><br><span style="color: hsl(0, 100%, 40%);">- OSMO_STRLCPY_ARRAY(vsub->imsi, imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    if (OSMO_STRLCPY_ARRAY(vsub->imsi, imsi) >= sizeof(vsub->imsi)) {</span><br><span style="color: hsl(120, 100%, 40%);">+            LOGP(DVLR, LOGL_NOTICE, "IMSI was truncated: full IMSI=%s, truncated IMSI=%s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                   imsi, vsub->imsi);</span><br><span style="color: hsl(120, 100%, 40%);">+          /* XXX Set truncated IMSI anyway, we currently cannot return an error from here. */</span><br><span style="color: hsl(120, 100%, 40%);">+   }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  vsub->id = atoll(vsub->imsi);</span><br><span>  DEBUGP(DVLR, "set IMSI on subscriber; IMSI=%s id=%llu\n",</span><br><span>         vsub->imsi, vsub->id);</span><br><span>@@ -1062,10 +1068,15 @@</span><br><span>        /* update the vlr_subscr with the given identity */</span><br><span>  switch (mi_type) {</span><br><span>   case GSM_MI_TYPE_IMSI:</span><br><span style="color: hsl(0, 100%, 40%);">-          if (vsub->imsi[0]</span><br><span style="color: hsl(120, 100%, 40%);">+          if (strlen(mi_string) >= sizeof(vsub->imsi)) {</span><br><span style="color: hsl(120, 100%, 40%);">+                  LOGVSUBP(LOGL_ERROR, vsub, "IMSI in ID RESP too long (>%zu bytes): %s\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                                 sizeof(vsub->imsi) - 1, mi_string);</span><br><span style="color: hsl(120, 100%, 40%);">+                       return -ENOSPC; /* ignore message; do not avance LU FSM */</span><br><span style="color: hsl(120, 100%, 40%);">+            } else if (vsub->imsi[0]</span><br><span>              && !vlr_subscr_matches_imsi(vsub, mi_string)) {</span><br><span>                  LOGVSUBP(LOGL_ERROR, vsub, "IMSI in ID RESP differs:"</span><br><span>                               " %s\n", mi_string);</span><br><span style="color: hsl(120, 100%, 40%);">+                       /* XXX Should we return an error, e.g. -EINVAL ? */</span><br><span>          } else</span><br><span>                       vlr_subscr_set_imsi(vsub, mi_string);</span><br><span>                break;</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/9739">change 9739</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/9739"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-msc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: I785c994f41a646d8d83d3d82f5a9ae6b572eb641 </div>
<div style="display:none"> Gerrit-Change-Number: 9739 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: Stefan Sperling <ssperling@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: Stefan Sperling <ssperling@sysmocom.de> </div>
<div style="display:none"> Gerrit-CC: Pau Espin Pedrol <pespin@sysmocom.de> </div>