diff options
Diffstat (limited to 'drivers/net/wireguard/netlink.c')
| -rw-r--r-- | drivers/net/wireguard/netlink.c | 13 | 
1 files changed, 6 insertions, 7 deletions
| diff --git a/drivers/net/wireguard/netlink.c b/drivers/net/wireguard/netlink.c index d0f3b6d7f408..5c804bcabfe6 100644 --- a/drivers/net/wireguard/netlink.c +++ b/drivers/net/wireguard/netlink.c @@ -436,14 +436,13 @@ static int set_peer(struct wg_device *wg, struct nlattr **attrs)  	if (attrs[WGPEER_A_ENDPOINT]) {  		struct sockaddr *addr = nla_data(attrs[WGPEER_A_ENDPOINT]);  		size_t len = nla_len(attrs[WGPEER_A_ENDPOINT]); +		struct endpoint endpoint = { { { 0 } } }; -		if ((len == sizeof(struct sockaddr_in) && -		     addr->sa_family == AF_INET) || -		    (len == sizeof(struct sockaddr_in6) && -		     addr->sa_family == AF_INET6)) { -			struct endpoint endpoint = { { { 0 } } }; - -			memcpy(&endpoint.addr, addr, len); +		if (len == sizeof(struct sockaddr_in) && addr->sa_family == AF_INET) { +			endpoint.addr4 = *(struct sockaddr_in *)addr; +			wg_socket_set_peer_endpoint(peer, &endpoint); +		} else if (len == sizeof(struct sockaddr_in6) && addr->sa_family == AF_INET6) { +			endpoint.addr6 = *(struct sockaddr_in6 *)addr;  			wg_socket_set_peer_endpoint(peer, &endpoint);  		}  	} | 
