diff --git a/dongle.c b/dongle.c
index a02669df7daab4c3703b67098c83a1fc1c39118c..4580550061d305ea57a645a9b8f152a5b288572f 100644
--- a/dongle.c
+++ b/dongle.c
@@ -228,7 +228,7 @@ void free_device(struct device *dev)
 
 	free(dev->ip);
 	free_usb(&(dev->usb));
-	free(&(dev->usb));
+	//free(&(dev->usb));
 }
 
 void free_usb(struct USB *usb)
@@ -551,9 +551,14 @@ char *get_device_ip(char *device_name)
 			continue;
 
 		host_flag = atoi(flags) & 4;
-		if (!host_flag)
+		if (!host_flag) {
+			free(route);
+			free(iface);
+			free(destination);
+			free(gateway);
+			free(flags);
 			continue;
-
+		}
 		ipv4_addr = (char *)calloc(1, IPV4_MAX);
 		if (!ipv4_addr)
 			break;
@@ -561,8 +566,8 @@ char *get_device_ip(char *device_name)
 		addr.s_addr = strtoul(destination, NULL, IPV4_MAX);
 		inet_ntop(AF_INET, &(addr.s_addr), ipv4_addr, IPV4_MAX);
 		//printf("ipv4_addr %s\n", ipv4_addr);
-	}
 
+	}
 	free(route);
 	free(iface);
 	free(destination);