<p>dexter has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/10055">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">protocol: prevent unnecessary null pointer deref<br><br>The function setup_rtp_processing() in mgcp_protocol.c executes a<br>function pointer setup_rtp_processing_cb(). The function pointer<br>gets two struct mgcp_rtp_end pointers as parameter. To get those<br>parameters it has to dereference them from struct mgcp_conn_rtp<br>pointers. The variable conn_src is such a struct pointer and there<br>are conditions where this pointer may be NULL. The function at the<br>function pointer should get the conn pointers directly instead of<br>the dereferenced end (rtp) pointers. This also gives additional<br>flexibility to the implementation behind the function pointer,<br>which is not yet defined (the function pointer points always to<br>a stub function since we donot support transcoding yet.<br><br>- give conn pointers directly to setup_rtp_processing_cb() insed<br>  of dereferencing conn_src->end<br><br>Change-Id: Id46e9bfba88613387026639eb4957221cce6820a<br>Closes OS#3406<br>---<br>M include/osmocom/mgcp/mgcp.h<br>M include/osmocom/mgcp/mgcp_internal.h<br>M src/libosmo-mgcp/mgcp_network.c<br>M src/libosmo-mgcp/mgcp_protocol.c<br>4 files changed, 12 insertions(+), 11 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/osmo-mgw refs/changes/55/10055/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/mgcp/mgcp.h b/include/osmocom/mgcp/mgcp.h</span><br><span>index bdc8f87..bdc86fc 100644</span><br><span>--- a/include/osmocom/mgcp/mgcp.h</span><br><span>+++ b/include/osmocom/mgcp/mgcp.h</span><br><span>@@ -74,11 +74,13 @@</span><br><span> typedef int (*mgcp_processing)(struct mgcp_endpoint *endp,</span><br><span>                          struct mgcp_rtp_end *dst_end,</span><br><span>                                char *data, int *len, int buf_size);</span><br><span style="color: hsl(0, 100%, 40%);">-typedef int (*mgcp_processing_setup)(struct mgcp_endpoint *endp,</span><br><span style="color: hsl(0, 100%, 40%);">-                                  struct mgcp_rtp_end *dst_end,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   struct mgcp_rtp_end *src_end);</span><br><span> </span><br><span> struct mgcp_conn_rtp;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+typedef int (*mgcp_processing_setup)(struct mgcp_endpoint *endp,</span><br><span style="color: hsl(120, 100%, 40%);">+                               struct mgcp_conn_rtp *conn_dst,</span><br><span style="color: hsl(120, 100%, 40%);">+                               struct mgcp_conn_rtp *conn_src);</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> typedef void (*mgcp_get_format)(struct mgcp_endpoint *endp,</span><br><span>                               int *payload_type,</span><br><span>                           const char**subtype_name,</span><br><span>diff --git a/include/osmocom/mgcp/mgcp_internal.h b/include/osmocom/mgcp/mgcp_internal.h</span><br><span>index 38b687c..06883dd 100644</span><br><span>--- a/include/osmocom/mgcp/mgcp_internal.h</span><br><span>+++ b/include/osmocom/mgcp/mgcp_internal.h</span><br><span>@@ -290,8 +290,8 @@</span><br><span>                                 char *data, int *len, int buf_size);</span><br><span> </span><br><span> int mgcp_setup_rtp_processing_default(struct mgcp_endpoint *endp,</span><br><span style="color: hsl(0, 100%, 40%);">-                                 struct mgcp_rtp_end *dst_end,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   struct mgcp_rtp_end *src_end);</span><br><span style="color: hsl(120, 100%, 40%);">+                                struct mgcp_conn_rtp *conn_dst,</span><br><span style="color: hsl(120, 100%, 40%);">+                               struct mgcp_conn_rtp *conn_src);</span><br><span> </span><br><span> void mgcp_get_net_downlink_format_default(struct mgcp_endpoint *endp,</span><br><span>                                    int *payload_type,</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_network.c b/src/libosmo-mgcp/mgcp_network.c</span><br><span>index 494156d..870a4de 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_network.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_network.c</span><br><span>@@ -399,12 +399,12 @@</span><br><span> </span><br><span> /*! dummy callback to disable transcoding (see also cfg->setup_rtp_processing_cb).</span><br><span>  *  \param[in] associated endpoint</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] destination RTP end</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] source RTP end</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] destination RTP connnection</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] source RTP connection</span><br><span>  *  \returns ignores input parameters, return always 0 */</span><br><span> int mgcp_setup_rtp_processing_default(struct mgcp_endpoint *endp,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   struct mgcp_rtp_end *dst_end,</span><br><span style="color: hsl(0, 100%, 40%);">-                                   struct mgcp_rtp_end *src_end)</span><br><span style="color: hsl(120, 100%, 40%);">+                                 struct mgcp_conn_rtp *conn_dst,</span><br><span style="color: hsl(120, 100%, 40%);">+                               struct mgcp_conn_rtp *conn_src)</span><br><span> {</span><br><span>   LOGP(DRTP, LOGL_DEBUG, "endpoint:0x%x transcoding disabled\n",</span><br><span>          ENDPOINT_NUMBER(endp));</span><br><span>diff --git a/src/libosmo-mgcp/mgcp_protocol.c b/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>index eea67a6..ea80907 100644</span><br><span>--- a/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>+++ b/src/libosmo-mgcp/mgcp_protocol.c</span><br><span>@@ -89,8 +89,7 @@</span><br><span>                }</span><br><span>    }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-   return cfg->setup_rtp_processing_cb(endp, &conn_dst->end,</span><br><span style="color: hsl(0, 100%, 40%);">-                                         &conn_src->end);</span><br><span style="color: hsl(120, 100%, 40%);">+   return cfg->setup_rtp_processing_cb(endp, conn_dst, conn_src);</span><br><span> }</span><br><span> </span><br><span> /* array of function pointers for handling various</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/10055">change 10055</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/10055"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-mgw </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: Id46e9bfba88613387026639eb4957221cce6820a </div>
<div style="display:none"> Gerrit-Change-Number: 10055 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: dexter <pmaier@sysmocom.de> </div>