<p>Harald Welte has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/10437">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">layer23: Replace all instances of strncpy() by osmo_strlcpy<br><br>This gives us working/safe zero termination without overflowing<br>the destination string size.<br><br>Change-Id: Ica6098ceba2bd01ce3b216085442cc5eed0ca507<br>---<br>M src/host/layer23/src/common/l1l2_interface.c<br>M src/host/layer23/src/common/sap_interface.c<br>M src/host/layer23/src/mobile/gsm411_sms.c<br>M src/host/layer23/src/mobile/gsm480_ss.c<br>M src/host/layer23/src/mobile/mnccms.c<br>M src/host/layer23/src/mobile/subscriber.c<br>M src/host/layer23/src/mobile/vty_interface.c<br>7 files changed, 15 insertions(+), 21 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/37/10437/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/host/layer23/src/common/l1l2_interface.c b/src/host/layer23/src/common/l1l2_interface.c</span><br><span>index 956279d..4d8f740 100644</span><br><span>--- a/src/host/layer23/src/common/l1l2_interface.c</span><br><span>+++ b/src/host/layer23/src/common/l1l2_interface.c</span><br><span>@@ -114,7 +114,7 @@</span><br><span>       }</span><br><span> </span><br><span>        local.sun_family = AF_UNIX;</span><br><span style="color: hsl(0, 100%, 40%);">-     strncpy(local.sun_path, socket_path, sizeof(local.sun_path));</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_strlcpy(local.sun_path, socket_path, sizeof(local.sun_path));</span><br><span>   local.sun_path[sizeof(local.sun_path) - 1] = '\0';</span><br><span> </span><br><span>       rc = connect(ms->l2_wq.bfd.fd, (struct sockaddr *) &local,</span><br><span>diff --git a/src/host/layer23/src/common/sap_interface.c b/src/host/layer23/src/common/sap_interface.c</span><br><span>index fd19659..645f434 100644</span><br><span>--- a/src/host/layer23/src/common/sap_interface.c</span><br><span>+++ b/src/host/layer23/src/common/sap_interface.c</span><br><span>@@ -508,7 +508,7 @@</span><br><span>     }</span><br><span> </span><br><span>        local.sun_family = AF_UNIX;</span><br><span style="color: hsl(0, 100%, 40%);">-     strncpy(local.sun_path, socket_path, sizeof(local.sun_path));</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_strlcpy(local.sun_path, socket_path, sizeof(local.sun_path));</span><br><span>   local.sun_path[sizeof(local.sun_path) - 1] = '\0';</span><br><span> </span><br><span>       rc = connect(ms->sap_wq.bfd.fd, (struct sockaddr *) &local, sizeof(local));</span><br><span>@@ -572,7 +572,7 @@</span><br><span> {</span><br><span>        struct gsm_settings *set = &ms->settings;</span><br><span>     memset(set->sap_socket_path, 0, sizeof(set->sap_socket_path));</span><br><span style="color: hsl(0, 100%, 40%);">-    strncpy(set->sap_socket_path, path, sizeof(set->sap_socket_path) - 1);</span><br><span style="color: hsl(120, 100%, 40%);">+  osmo_strlcpy(set->sap_socket_path, path, sizeof(set->sap_socket_path) - 1);</span><br><span> </span><br><span>        return 0;</span><br><span> }</span><br><span>diff --git a/src/host/layer23/src/mobile/gsm411_sms.c b/src/host/layer23/src/mobile/gsm411_sms.c</span><br><span>index 623ba53..c476ff4 100644</span><br><span>--- a/src/host/layer23/src/mobile/gsm411_sms.c</span><br><span>+++ b/src/host/layer23/src/mobile/gsm411_sms.c</span><br><span>@@ -104,7 +104,7 @@</span><br><span>    if (!sms)</span><br><span>            return NULL;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        strncpy(sms->text, text, sizeof(sms->text)-1);</span><br><span style="color: hsl(120, 100%, 40%);">+  OSMO_STRLCPY_ARRAY(sms->text, text);</span><br><span> </span><br><span>  /* FIXME: don't use ID 1 static */</span><br><span>       sms->reply_path_req = 0;</span><br><span>@@ -112,7 +112,7 @@</span><br><span>    sms->ud_hdr_ind = 0;</span><br><span>      sms->protocol_id = 0; /* implicit */</span><br><span>      sms->data_coding_scheme = dcs;</span><br><span style="color: hsl(0, 100%, 40%);">-       strncpy(sms->address, receiver, sizeof(sms->address)-1);</span><br><span style="color: hsl(120, 100%, 40%);">+        OSMO_STRLCPY_ARRAY(sms->address, receiver);</span><br><span>       /* Generate user_data */</span><br><span>     sms->user_data_len = gsm_7bit_encode_n(sms->user_data,</span><br><span>                 sizeof(sms->user_data), sms->text, NULL);</span><br><span>diff --git a/src/host/layer23/src/mobile/gsm480_ss.c b/src/host/layer23/src/mobile/gsm480_ss.c</span><br><span>index ee2c943..2869ce6 100644</span><br><span>--- a/src/host/layer23/src/mobile/gsm480_ss.c</span><br><span>+++ b/src/host/layer23/src/mobile/gsm480_ss.c</span><br><span>@@ -200,8 +200,7 @@</span><br><span>       if (response) {</span><br><span>              char text[256], *t = text, *s;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-              strncpy(text, response, sizeof(text) - 1);</span><br><span style="color: hsl(0, 100%, 40%);">-              text[sizeof(text) - 1] = '\0';</span><br><span style="color: hsl(120, 100%, 40%);">+                OSMO_STRLCPY_ARRAY(text, response);</span><br><span>          while ((s = strchr(text, '\r')))</span><br><span>                     *s = '\n';</span><br><span>           while ((s = strsep(&t, "\n"))) {</span><br><span>@@ -655,9 +654,7 @@</span><br><span>         </span><br><span>             /* register */</span><br><span>               if (ss_code && to && to[0] == '*') {</span><br><span style="color: hsl(0, 100%, 40%);">-                    strncpy(dest, to + 1, sizeof(dest) - 1);</span><br><span style="color: hsl(0, 100%, 40%);">-                        dest[sizeof(dest) - 1] = '\0';</span><br><span style="color: hsl(0, 100%, 40%);">-                  dest[strlen(dest) - 1] = '\0';</span><br><span style="color: hsl(120, 100%, 40%);">+                        OSMO_STRLCPY_ARRAY(dest, to + 1);</span><br><span>                    return gsm480_tx_cf(trans, GSM0480_MTYPE_REGISTER,</span><br><span>                           GSM0480_OP_CODE_REGISTER_SS, ss_code, dest);</span><br><span>                 }</span><br><span>diff --git a/src/host/layer23/src/mobile/mnccms.c b/src/host/layer23/src/mobile/mnccms.c</span><br><span>index b8c2558..9be9c8f 100644</span><br><span>--- a/src/host/layer23/src/mobile/mnccms.c</span><br><span>+++ b/src/host/layer23/src/mobile/mnccms.c</span><br><span>@@ -576,8 +576,7 @@</span><br><span>                         setup.called.type = 0; /* auto/unknown - prefix must be</span><br><span>                                                used */</span><br><span>            setup.called.plan = 1; /* ISDN */</span><br><span style="color: hsl(0, 100%, 40%);">-               strncpy(setup.called.number, number,</span><br><span style="color: hsl(0, 100%, 40%);">-                    sizeof(setup.called.number) - 1);</span><br><span style="color: hsl(120, 100%, 40%);">+             OSMO_STRLCPY_ARRAY(setup.called.number, number);</span><br><span> </span><br><span>                 /* bearer capability (mandatory) */</span><br><span>          mncc_set_bearer(ms, -1, &setup);</span><br><span>@@ -808,7 +807,7 @@</span><br><span>   }</span><br><span> </span><br><span>        call->dtmf_index = 0;</span><br><span style="color: hsl(0, 100%, 40%);">-        strncpy(call->dtmf, dtmf, sizeof(call->dtmf) - 1);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_STRLCPY_ARRAY(call->dtmf, dtmf);</span><br><span>     return dtmf_statemachine(call, NULL);</span><br><span> }</span><br><span> </span><br><span>diff --git a/src/host/layer23/src/mobile/subscriber.c b/src/host/layer23/src/mobile/subscriber.c</span><br><span>index 6a30148..7a01141 100644</span><br><span>--- a/src/host/layer23/src/mobile/subscriber.c</span><br><span>+++ b/src/host/layer23/src/mobile/subscriber.c</span><br><span>@@ -256,7 +256,7 @@</span><br><span>            return -EINVAL;</span><br><span>      }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   strncpy(subscr->imsi, imsi + 1, sizeof(subscr->imsi) - 1);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_STRLCPY_ARRAY(subscr->imsi, imsi + 1);</span><br><span> </span><br><span>   LOGP(DMM, LOGL_INFO, "received IMSI %s from SIM\n", subscr->imsi);</span><br><span> </span><br><span>diff --git a/src/host/layer23/src/mobile/vty_interface.c b/src/host/layer23/src/mobile/vty_interface.c</span><br><span>index 4adcf90..12c32a5 100644</span><br><span>--- a/src/host/layer23/src/mobile/vty_interface.c</span><br><span>+++ b/src/host/layer23/src/mobile/vty_interface.c</span><br><span>@@ -1582,8 +1582,7 @@</span><br><span>         struct osmocom_ms *ms = vty->index;</span><br><span>       struct gsm_settings *set = &ms->settings;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    strncpy(set->layer2_socket_path, argv[0],</span><br><span style="color: hsl(0, 100%, 40%);">-            sizeof(set->layer2_socket_path) - 1);</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_STRLCPY_ARRAY(set->layer2_socket_path, argv[0]);</span><br><span> </span><br><span>         vty_restart(vty, ms);</span><br><span>        return CMD_SUCCESS;</span><br><span>@@ -1596,8 +1595,7 @@</span><br><span>  struct osmocom_ms *ms = vty->index;</span><br><span>       struct gsm_settings *set = &ms->settings;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-    strncpy(set->sap_socket_path, argv[0],</span><br><span style="color: hsl(0, 100%, 40%);">-               sizeof(set->sap_socket_path) - 1);</span><br><span style="color: hsl(120, 100%, 40%);">+ OSMO_STRLCPY_ARRAY(set->sap_socket_path, argv[0]);</span><br><span> </span><br><span>    vty_restart(vty, ms);</span><br><span>        return CMD_SUCCESS;</span><br><span>@@ -2134,10 +2132,10 @@</span><br><span>                return CMD_WARNING;</span><br><span>  }</span><br><span>    llist_add_tail(&abbrev->list, &set->abbrev);</span><br><span style="color: hsl(0, 100%, 40%);">-      strncpy(abbrev->abbrev, argv[0], sizeof(abbrev->abbrev) - 1);</span><br><span style="color: hsl(0, 100%, 40%);">-     strncpy(abbrev->number, argv[1], sizeof(abbrev->number) - 1);</span><br><span style="color: hsl(120, 100%, 40%);">+   OSMO_STRLCPY_ARRAY(abbrev->abbrev, argv[0]);</span><br><span style="color: hsl(120, 100%, 40%);">+       OSMO_STRLCPY_ARRAY(abbrev->number, argv[1]);</span><br><span>      if (argc >= 3)</span><br><span style="color: hsl(0, 100%, 40%);">-               strncpy(abbrev->name, argv[2], sizeof(abbrev->name) - 1);</span><br><span style="color: hsl(120, 100%, 40%);">+               OSMO_STRLCPY_ARRAY(abbrev->name, argv[2]);</span><br><span> </span><br><span>    return CMD_SUCCESS;</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/10437">change 10437</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/10437"/><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: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Ica6098ceba2bd01ce3b216085442cc5eed0ca507 </div>
<div style="display:none"> Gerrit-Change-Number: 10437 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>