From 307fdcb4d4c234440ee348f7f577c9b046566d0d Mon Sep 17 00:00:00 2001 From: Tushar Pankaj Date: Tue, 20 Nov 2018 20:24:15 -0600 Subject: Fix bugs in server address check Signed-off-by: Tushar Pankaj --- Makefile | 4 ++-- client.c | 14 ++++++++------ 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 0c47913..dd6e228 100644 --- a/Makefile +++ b/Makefile @@ -20,9 +20,9 @@ wg-dynamic-server: ${SERVER_OBJS} ${CC} ${LDFLAGS} ${SERVER_OBJS} -o $@ wg_dynamic_client.o: wg_dynamic_client.c client.h -client.o: client.c client.h wireguard.h +client.o: client.c client.h protocol.h wireguard.h wg_dynamic_server.o: wg_dynamic_server.c server.h -server.o: server.c server.h wireguard.h +server.o: server.c server.h protocol.h wireguard.h wireguard.o: wireguard.c wireguard.h protocol.capnp.o: protocol.capnp.c diff --git a/client.c b/client.c index 131e6fb..6bdd480 100644 --- a/client.c +++ b/client.c @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -27,24 +28,25 @@ bool is_server_in_allowed_ips(const char iface[]) ret = wg_get_device(&device, iface); if (ret < 0) { - goto nodevice; + wg_free_device(device); + return false; } wg_for_each_allowedip(device->first_peer, allowedip) { if (allowedip->family == AF_INET6) { - allowed_ip6 = *(unsigned __int128 *)(&allowedip->ip6); - subnet_mask = ~0 << allowedip->cidr; + memset(&subnet_mask, 0xFF, sizeof(unsigned __int128)); + memcpy(&allowed_ip6, &allowedip->ip6, + sizeof(unsigned __int128)); + subnet_mask <<= allowedip->cidr; server_addr &= subnet_mask; allowed_ip6 &= subnet_mask; if (server_addr == allowed_ip6) { + wg_free_device(device); return true; } } } - return false; - -nodevice: wg_free_device(device); return false; } -- cgit v1.2.3-59-g8ed1b