<p>daniel has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/osmo-sgsn/+/17081">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gprs_gmm: Check for RAT change and ensure this only happens for RAU/ATT<br><br>Change-Id: I38cb31907eddeade5350cdb648df179408d908d2<br>Related: OS#3727<br>---<br>M src/sgsn/gprs_gmm.c<br>1 file changed, 27 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-sgsn refs/changes/81/17081/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/sgsn/gprs_gmm.c b/src/sgsn/gprs_gmm.c</span><br><span>index f62d0d1..c574dac 100644</span><br><span>--- a/src/sgsn/gprs_gmm.c</span><br><span>+++ b/src/sgsn/gprs_gmm.c</span><br><span>@@ -1099,6 +1099,16 @@</span><br><span>        osmo_fsm_inst_dispatch(ctx->gmm_fsm, E_GMM_COMMON_PROC_INIT_REQ, NULL);</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/* Detect if RAT has changed */</span><br><span style="color: hsl(120, 100%, 40%);">+static bool mmctx_did_rat_change(struct sgsn_mm_ctx *mmctx, struct msgb *msg)</span><br><span style="color: hsl(120, 100%, 40%);">+{</span><br><span style="color: hsl(120, 100%, 40%);">+        if (MSG_IU_UE_CTX(msg) && mmctx->ran_type != MM_CTX_T_UTRAN_Iu)</span><br><span style="color: hsl(120, 100%, 40%);">+            return true;</span><br><span style="color: hsl(120, 100%, 40%);">+  if (!MSG_IU_UE_CTX(msg) && mmctx->ran_type != MM_CTX_T_GERAN_Gb)</span><br><span style="color: hsl(120, 100%, 40%);">+           return true;</span><br><span style="color: hsl(120, 100%, 40%);">+  return false;</span><br><span style="color: hsl(120, 100%, 40%);">+}</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> /* 3GPP TS 24.008 ยง 9.4.1 Attach request */</span><br><span> static int gsm48_rx_gmm_att_req(struct sgsn_mm_ctx *ctx, struct msgb *msg,</span><br><span>                             struct gprs_llc_llme *llme)</span><br><span>@@ -1944,6 +1954,23 @@</span><br><span>                 return rc;</span><br><span>   }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ /* A RAT change is only expected/allowed for RAU/Attach Req */</span><br><span style="color: hsl(120, 100%, 40%);">+        if (mmctx && mmctx_did_rat_change(mmctx, msg)) {</span><br><span style="color: hsl(120, 100%, 40%);">+              switch (gh->msg_type) {</span><br><span style="color: hsl(120, 100%, 40%);">+            case GSM48_MT_GMM_RA_UPD_REQ:</span><br><span style="color: hsl(120, 100%, 40%);">+         case GSM48_MT_GMM_ATTACH_REQ:</span><br><span style="color: hsl(120, 100%, 40%);">+                 break;</span><br><span style="color: hsl(120, 100%, 40%);">+                default:</span><br><span style="color: hsl(120, 100%, 40%);">+                      /* This shouldn't happen with other message types and</span><br><span style="color: hsl(120, 100%, 40%);">+                      * we need to error out to prevent a crash */</span><br><span style="color: hsl(120, 100%, 40%);">+                 LOGMMCTXP(LOGL_NOTICE, mmctx, "Dropping GMM %s which was received on different "</span><br><span style="color: hsl(120, 100%, 40%);">+                                   "RAT (mmctx ran_type=%u, msg_iu_ue_ctx=%p\n",</span><br><span style="color: hsl(120, 100%, 40%);">+                                       get_value_string(gprs_msgt_gmm_names, gh->msg_type),</span><br><span style="color: hsl(120, 100%, 40%);">+                                       mmctx->ran_type, MSG_IU_UE_CTX(msg));</span><br><span style="color: hsl(120, 100%, 40%);">+                       return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+               }</span><br><span style="color: hsl(120, 100%, 40%);">+     }</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>  /*</span><br><span>    * For a few messages, mmctx may be NULL. For most, we want to ensure a</span><br><span>       * non-NULL mmctx. At the same time, we want to keep the message</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-sgsn/+/17081">change 17081</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/c/osmo-sgsn/+/17081"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-sgsn </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I38cb31907eddeade5350cdb648df179408d908d2 </div>
<div style="display:none"> Gerrit-Change-Number: 17081 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: daniel <dwillmann@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>