diff --git a/src/ipc-freebsd.h b/src/ipc-freebsd.h index 6cd379e..434abe8 100644 --- a/src/ipc-freebsd.h +++ b/src/ipc-freebsd.h @@ -132,9 +132,8 @@ static nvlist_t *pack_peer(struct wgpeer *peer) nvlist_add_binary(nvl_peer, "pre-shared-key", peer->preshared_key, WG_KEY_LEN); /* TODO: preshared-key instead of pre-shared-key */ if (peer->flags & WGPEER_HAS_PERSISTENT_KEEPALIVE_INTERVAL) nvlist_add_number(nvl_peer, "persistent-keepalive-interval", peer->persistent_keepalive_interval); - if ((peer->endpoint.addr.sa_family == AF_INET || peer->endpoint.addr.sa_family == AF_INET6) && - peer->endpoint.addr.sa_len <= sizeof(struct sockaddr)) - nvlist_add_binary(nvl_peer, "endpoint", &peer->endpoint.addr, sizeof(struct sockaddr)); + if (peer->endpoint.addr.sa_family == AF_INET || peer->endpoint.addr.sa_family == AF_INET6) + nvlist_add_binary(nvl_peer, "endpoint", &peer->endpoint.addr, peer->endpoint.addr.sa_len); nvlist_add_bool(nvl_peer, "replace-allowedips", !!(peer->flags & WGPEER_REPLACE_ALLOWEDIPS)); nvlist_add_bool(nvl_peer, "peer-remove", !!(peer->flags & WGPEER_REMOVE_ME)); for_each_wgallowedip(peer, aip) { @@ -188,8 +187,8 @@ static struct wgpeer *unpack_peer(const nvlist_t *nvl_peer) } if (nvlist_exists_binary(nvl_peer, "endpoint")) { endpoint = nvlist_get_binary(nvl_peer, "endpoint", &size); - if (size <= sizeof(peer->endpoint.addr)) - memcpy(&peer->endpoint.addr, endpoint, endpoint->sa_len); + if (size <= sizeof(peer->endpoint)) + memcpy(&peer->endpoint.addr, endpoint, size); } if (nvlist_exists_number(nvl_peer, "rx_bytes")) peer->rx_bytes = nvlist_get_number(nvl_peer, "rx_bytes");