<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/libosmocore/+/19885">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  laforge: Looks good to me, approved
  Jenkins Builder: Verified

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">socket: Fix stack-buffer-overflow in osmo_sock_local_ip()<br><br>On IPv6 sockets, getsockname() and inet_ntop() would act upon a<br>structure struct sockaddr_in.<br><br>First getsockname() would succeed but truncate the address, and later on<br>inet_ntop would read out of the scope of the structure.<br><br>Change-Id: If781d56680758a97643b1b38e78d3431ea649020<br>---<br>M src/socket.c<br>1 file changed, 17 insertions(+), 6 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/socket.c b/src/socket.c</span><br><span>index 62a5846..df37ab8 100644</span><br><span>--- a/src/socket.c</span><br><span>+++ b/src/socket.c</span><br><span>@@ -1413,7 +1413,9 @@</span><br><span>        int rc;</span><br><span>      struct addrinfo addrinfo_hint;</span><br><span>       struct addrinfo *addrinfo = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-       struct sockaddr_in local_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+        struct sockaddr_storage local_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+   struct sockaddr_in *sin;</span><br><span style="color: hsl(120, 100%, 40%);">+      struct sockaddr_in6 *sin6;</span><br><span>   socklen_t local_addr_len;</span><br><span>    uint16_t family;</span><br><span> </span><br><span>@@ -1442,12 +1444,21 @@</span><br><span>       close(sfd);</span><br><span>  if (rc < 0)</span><br><span>               return -EINVAL;</span><br><span style="color: hsl(0, 100%, 40%);">- if (local_addr.sin_family == AF_INET)</span><br><span style="color: hsl(0, 100%, 40%);">-           inet_ntop(AF_INET, &local_addr.sin_addr, local_ip, INET_ADDRSTRLEN);</span><br><span style="color: hsl(0, 100%, 40%);">-        else if (local_addr.sin_family == AF_INET6)</span><br><span style="color: hsl(0, 100%, 40%);">-             inet_ntop(AF_INET6, &local_addr.sin_addr, local_ip, INET6_ADDRSTRLEN);</span><br><span style="color: hsl(0, 100%, 40%);">-      else</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        switch (local_addr.ss_family) {</span><br><span style="color: hsl(120, 100%, 40%);">+       case AF_INET:</span><br><span style="color: hsl(120, 100%, 40%);">+         sin = (struct sockaddr_in*)&local_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+           if (!inet_ntop(AF_INET, &sin->sin_addr, local_ip, INET_ADDRSTRLEN))</span><br><span style="color: hsl(120, 100%, 40%);">+                    return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        case AF_INET6:</span><br><span style="color: hsl(120, 100%, 40%);">+                sin6 = (struct sockaddr_in6*)&local_addr;</span><br><span style="color: hsl(120, 100%, 40%);">+         if (!inet_ntop(AF_INET6, &sin6->sin6_addr, local_ip, INET_ADDRSTRLEN))</span><br><span style="color: hsl(120, 100%, 40%);">+                 return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+               break;</span><br><span style="color: hsl(120, 100%, 40%);">+        default:</span><br><span>             return -EINVAL;</span><br><span style="color: hsl(120, 100%, 40%);">+       }</span><br><span> </span><br><span>        return 0;</span><br><span> }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/libosmocore/+/19885">change 19885</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/+/19885"/><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: If781d56680758a97643b1b38e78d3431ea649020 </div>
<div style="display:none"> Gerrit-Change-Number: 19885 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: laforge <laforge@osmocom.org> </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>