Index: uspace/drv/bus/usb/usbhub/port.c
===================================================================
--- uspace/drv/bus/usb/usbhub/port.c	(revision c9467b013ac7c2fc324b2f6ae26438927b70100d)
+++ uspace/drv/bus/usb/usbhub/port.c	(revision a5a470c6e40a57befd448eb5f1753c0545a63690)
@@ -458,4 +458,5 @@
 	assert(params);
 
+	int ret = EOK;
 	usb_hub_dev_t *hub = params->hub;
 	usb_hub_port_t *port = params->port;
@@ -468,9 +469,9 @@
 	if (!exch) {
 		usb_log_error("Failed to begin bus exchange\n");
-		return ENOMEM;
+		ret = ENOMEM;
+		goto out;
 	}
 
 	/* Reserve default address */
-	int ret;
 	while ((ret = usb_reserve_default_address(exch, speed)) == ENOENT) {
 		async_usleep(1000000);
@@ -479,6 +480,5 @@
 		usb_log_error("Failed to reserve default address: %s\n",
 		    str_error(ret));
-		async_exchange_end(exch);
-		return ret;
+		goto out;
 	}
 
@@ -489,6 +489,6 @@
 		if (usb_release_default_address(exch) != EOK)
 			usb_log_warning("Failed to release default address\n");
-		async_exchange_end(exch);
-		return EIO;
+		ret = EIO;
+		goto out;
 	}
 
@@ -508,4 +508,5 @@
 			usb_log_warning("Failed to release default address\n");
 	}
+out:
 	async_exchange_end(exch);
 
