socket: use inet_ntop() instead of inet_ntoa() in osmo_sock_local_ip()

The function inet_ntoa() stores its result in a static buffer and
returns the pointer. When inet_ntoa() is called subsequently it
overwrite the content of its static buffer with the new result.

Since we osmo_sock_local_ip() is a library function we should use
the more safe variant inet_ntop() in order to prevent unintentionally
overwriting data that the caller might still need. Such an error
would be hard to find.

- Use the more safe inet_ntop() inestead of inet_ntoa()

Change-Id: I9852b57736432032542bd96b6fdd4a2f08fc1f64
This commit is contained in:
Philipp Maier 2018-01-22 16:56:27 +01:00
parent 49382720f8
commit 91cfda81b5
1 changed files with 2 additions and 2 deletions

View File

@ -831,9 +831,9 @@ int osmo_sock_local_ip(char *local_ip, const char *remote_ip)
if (rc < 0)
return -EINVAL;
if (local_addr.sin_family == AF_INET)
strncpy(local_ip, inet_ntoa(local_addr.sin_addr), INET_ADDRSTRLEN);
inet_ntop(AF_INET, &local_addr.sin_addr, local_ip, INET_ADDRSTRLEN);
else if (local_addr.sin_family == AF_INET6)
strncpy(local_ip, inet_ntoa(local_addr.sin_addr), INET6_ADDRSTRLEN);
inet_ntop(AF_INET6, &local_addr.sin_addr, local_ip, INET6_ADDRSTRLEN);
else
return -EINVAL;