<p>fixeria has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/19912">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">gsm0808: fix: do not encode invalid encryption algorithm<br><br>According to 3GPP TS 48.008, section 3.2.2.44, the Chosen Encryption<br>Algorithm IE, which may be included in the following messages:<br><br>  - 3.2.1.2   ASSIGNMENT COMPLETE<br>  - 3.2.1.8   HANDOVER REQUEST<br>  - 3.2.1.10  HANDOVER REQUEST ACKNOWLEDGE<br>  - 3.2.1.12  HANDOVER COMPLETE<br>  - 3.2.1.25  HANDOVER PERFORMED<br>  - 3.2.1.31  CIPHER MODE COMPLETE<br><br>is coded as follows:<br><br>  0000 0001   No encryption used<br>  0000 0010   GSM A5/1<br>  0000 0011   GSM A5/2<br>  0000 0100   GSM A5/3<br>  0000 0101   GSM A5/4<br>  0000 0110   GSM A5/5<br>  0000 0111   GSM A5/6<br>  0000 1000   GSM A5/7<br><br>basically A5/X => X + 1.  All other values are Reserved for future<br>international use.  As can be seen, value 0x00 is RFU.  Passing<br>this value to some encoding functions would result in a PDU with<br>this IE omitted.  Although, some functions would still encode<br>Chosen Encryption Algorithm IE with this RFU value.<br><br>Let's ensure that all functions behave consistently.<br><br>Change-Id: If10e433a8174eabe6aa6d2c2937bf9cf5d14d7c9<br>---<br>M src/gsm/gsm0808.c<br>1 file changed, 9 insertions(+), 7 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/12/19912/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/gsm/gsm0808.c b/src/gsm/gsm0808.c</span><br><span>index 85f5cfc..5322061 100644</span><br><span>--- a/src/gsm/gsm0808.c</span><br><span>+++ b/src/gsm/gsm0808.c</span><br><span>@@ -283,8 +283,9 @@</span><br><span>                                  msgb_l3len(layer3), layer3->l3h);</span><br><span>         }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   /* and the optional BSS message */</span><br><span style="color: hsl(0, 100%, 40%);">-      msgb_tv_put(msg, GSM0808_IE_CHOSEN_ENCR_ALG, alg_id);</span><br><span style="color: hsl(120, 100%, 40%);">+ /* Optional Chosen Encryption Algorithm IE */</span><br><span style="color: hsl(120, 100%, 40%);">+ if (alg_id > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+            msgb_tv_put(msg, GSM0808_IE_CHOSEN_ENCR_ALG, alg_id);</span><br><span> </span><br><span>    /* pre-pend the header */</span><br><span>    msg->l3h = msgb_tv_push(msg, BSSAP_MSG_BSS_MANAGEMENT, msgb_length(msg));</span><br><span>@@ -603,7 +604,8 @@</span><br><span>   msgb_tv_put(msg, GSM0808_IE_CHOSEN_CHANNEL, chosen_channel);</span><br><span> </span><br><span>     /* write chosen encryption algorithm 3.2.2.44 */</span><br><span style="color: hsl(0, 100%, 40%);">-        msgb_tv_put(msg, GSM0808_IE_CHOSEN_ENCR_ALG, encr_alg_id);</span><br><span style="color: hsl(120, 100%, 40%);">+    if (encr_alg_id > 0)</span><br><span style="color: hsl(120, 100%, 40%);">+               msgb_tv_put(msg, GSM0808_IE_CHOSEN_ENCR_ALG, encr_alg_id);</span><br><span> </span><br><span>       /* write circuit pool 3.2.2.45 */</span><br><span>    /* write speech version chosen: 3.2.2.51 when BTS picked it */</span><br><span>@@ -964,7 +966,7 @@</span><br><span>         }</span><br><span> </span><br><span>        /* Chosen Encryption Algorithm (Serving) 3.2.2.44 */</span><br><span style="color: hsl(0, 100%, 40%);">-    if (params->chosen_encryption_algorithm_serving)</span><br><span style="color: hsl(120, 100%, 40%);">+   if (params->chosen_encryption_algorithm_serving > 0)</span><br><span>           msgb_tv_put(msg, GSM0808_IE_CHOSEN_ENCR_ALG, params->chosen_encryption_algorithm_serving);</span><br><span> </span><br><span>    /* Old BSS to New BSS Information 3.2.2.58 */</span><br><span>@@ -1027,7 +1029,7 @@</span><br><span> </span><br><span>    if (params->chosen_channel_present)</span><br><span>               msgb_tv_put(msg, GSM0808_IE_CHOSEN_CHANNEL, params->chosen_channel);</span><br><span style="color: hsl(0, 100%, 40%);">- if (params->chosen_encr_alg)</span><br><span style="color: hsl(120, 100%, 40%);">+       if (params->chosen_encr_alg > 0)</span><br><span>               msgb_tv_put(msg, GSM0808_IE_CHOSEN_ENCR_ALG, params->chosen_encr_alg);</span><br><span> </span><br><span>        if (params->chosen_speech_version != 0)</span><br><span>@@ -1157,7 +1159,7 @@</span><br><span>           gsm0808_enc_speech_codec_list(msg, &params->codec_list_bss_supported);</span><br><span> </span><br><span>    /* Chosen Encryption Algorithm 3.2.2.44 */</span><br><span style="color: hsl(0, 100%, 40%);">-      if (params->chosen_encr_alg_present)</span><br><span style="color: hsl(120, 100%, 40%);">+       if (params->chosen_encr_alg_present && params->chosen_encr_alg > 0)</span><br><span>                 msgb_tv_put(msg, GSM0808_IE_CHOSEN_ENCR_ALG, params->chosen_encr_alg);</span><br><span> </span><br><span>        /* LCLS-BSS-Status 3.2.2.119 */</span><br><span>@@ -1225,7 +1227,7 @@</span><br><span>              msgb_tv_put(msg, GSM0808_IE_CHOSEN_CHANNEL, params->chosen_channel);</span><br><span> </span><br><span>  /* Chosen Encryption Algorithm 3.2.2.44 */</span><br><span style="color: hsl(0, 100%, 40%);">-      if (params->chosen_encr_alg_present)</span><br><span style="color: hsl(120, 100%, 40%);">+       if (params->chosen_encr_alg_present && params->chosen_encr_alg > 0)</span><br><span>                 msgb_tv_put(msg, GSM0808_IE_CHOSEN_ENCR_ALG, params->chosen_encr_alg);</span><br><span> </span><br><span>        /* Speech Version (chosen) 3.2.2.51 */</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/19912">change 19912</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/libosmocore/+/19912"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: If10e433a8174eabe6aa6d2c2937bf9cf5d14d7c9 </div>
<div style="display:none"> Gerrit-Change-Number: 19912 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>