diff --git a/ibacm/src/acm.c b/ibacm/src/acm.c index ad313075c..04b84e348 100644 --- a/ibacm/src/acm.c +++ b/ibacm/src/acm.c @@ -2654,6 +2654,8 @@ static void acm_open_dev(struct ibv_device *ibdev) return; } + free(dev); + err1: ibv_close_device(verbs); } diff --git a/iwpmd/iwarp_pm_common.c b/iwpmd/iwarp_pm_common.c index 5c877db7e..8160180ae 100644 --- a/iwpmd/iwarp_pm_common.c +++ b/iwpmd/iwarp_pm_common.c @@ -529,41 +529,48 @@ void copy_iwpm_sockaddr(__u16 addr_family, struct sockaddr_storage *src_sockaddr struct sockaddr_storage *dst_sockaddr, char *src_addr, char *dst_addr, __be16 *src_port) { - char *src = NULL, *dst = NULL; - - if (src_addr) - src = src_addr; - if (dst_addr) - dst = dst_addr; - switch (addr_family) { - case AF_INET: + case AF_INET: { + const struct in_addr *src = (void *)src_addr; + struct in_addr *dst = (void *)dst_addr; + const struct sockaddr_in *src_sockaddr_in; + struct sockaddr_in *dst_sockaddr_in; + if (src_sockaddr) { - src = (char *)&((struct sockaddr_in *)src_sockaddr)->sin_addr.s_addr; - *src_port = ((struct sockaddr_in *)src_sockaddr)->sin_port; + src_sockaddr_in = (const void *)src_sockaddr; + src = &src_sockaddr_in->sin_addr; + *src_port = src_sockaddr_in->sin_port; } if (dst_sockaddr) { - dst = (char *)&(((struct sockaddr_in *)dst_sockaddr)->sin_addr.s_addr); - ((struct sockaddr_in *)dst_sockaddr)->sin_port = *src_port; - ((struct sockaddr_in *)dst_sockaddr)->sin_family = AF_INET; + dst_sockaddr_in = (void *)dst_sockaddr; + dst = &dst_sockaddr_in->sin_addr; + dst_sockaddr_in->sin_port = *src_port; + dst_sockaddr_in->sin_family = AF_INET; } + *dst = *src; break; - case AF_INET6: + } + case AF_INET6: { + const struct in6_addr *src = (void *)src_addr; + struct in6_addr *dst = (void *)dst_addr; + const struct sockaddr_in6 *src_sockaddr_in6; + struct sockaddr_in6 *dst_sockaddr_in6; + if (src_sockaddr) { - src = (char *)&((struct sockaddr_in6 *)src_sockaddr)->sin6_addr.s6_addr; - *src_port = ((struct sockaddr_in6 *)src_sockaddr)->sin6_port; + src_sockaddr_in6 = (const void *)src_sockaddr; + src = &src_sockaddr_in6->sin6_addr; + *src_port = src_sockaddr_in6->sin6_port; } if (dst_sockaddr) { - dst = (char *)&(((struct sockaddr_in6 *)dst_sockaddr)->sin6_addr.s6_addr); - ((struct sockaddr_in6 *)dst_sockaddr)->sin6_port = *src_port; - ((struct sockaddr_in6 *)dst_sockaddr)->sin6_family = AF_INET6; + dst_sockaddr_in6 = (void *)dst_sockaddr; + dst = &dst_sockaddr_in6->sin6_addr; + dst_sockaddr_in6->sin6_port = *src_port; + dst_sockaddr_in6->sin6_family = AF_INET6; } + *dst = *src; break; - default: - return; } - - memcpy(dst, src, IWPM_IPADDR_SIZE); + } } /** diff --git a/librdmacm/cma.c b/librdmacm/cma.c index ff298fb2e..e742151a4 100644 --- a/librdmacm/cma.c +++ b/librdmacm/cma.c @@ -997,7 +997,7 @@ int rdma_resolve_addr(struct rdma_cm_id *id, struct sockaddr *src_addr, if (ret != sizeof cmd) return (ret >= 0) ? ERR(ENODATA) : -1; - memcpy(&id->route.addr.dst_addr, dst_addr, dst_len); + memcpy(&id->route.addr.dst_storage, dst_addr, dst_len); return ucma_complete(id); }