From b5cb66927d4ade915481639eb8095f0ab0cf2408 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Fri, 17 Oct 2014 16:53:15 -0600 Subject: [PATCH] Fix memcpy of host address in netlib_gethostaddr(). From Brennan Ashton --- netutils/netlib/netlib_gethostaddr.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/netutils/netlib/netlib_gethostaddr.c b/netutils/netlib/netlib_gethostaddr.c index b772b1ee4..ec6659041 100644 --- a/netutils/netlib/netlib_gethostaddr.c +++ b/netutils/netlib/netlib_gethostaddr.c @@ -71,7 +71,7 @@ * ipaddr The location to return the IP address * * Return: - * 0 on sucess; -1 on failure + * 0 on success; -1 on failure * ****************************************************************************/ @@ -93,14 +93,20 @@ int netlib_gethostaddr(const char *ifname, struct in_addr *addr) if (!ret) { #ifdef CONFIG_NET_IPv6 - memcpy(addr, &req.ifr_addr, sizeof(struct in6_addr)); + FAR struct sockaddr_in6 *req_addr; + req_addr = (FAR struct sockaddr_in6 *)&req.ifr_addr; + memcpy(addr, &req_addr->sin6_addr, sizeof(struct in6_addr)); #else - memcpy(addr, &req.ifr_addr, sizeof(struct in_addr)); + FAR struct sockaddr_in *req_addr; + req_addr = (struct sockaddr_in*)&req.ifr_addr; + memcpy(addr, &req_addr->sin_addr, sizeof(struct in_addr)); #endif } + close(sockfd); } } + return ret; }