Index: uspace/lib/usbhost/src/usb_bus.c
===================================================================
--- uspace/lib/usbhost/src/usb_bus.c	(revision 4547f1115bd8270b9a1bcf3bb8d3e02111295371)
+++ uspace/lib/usbhost/src/usb_bus.c	(revision 7ce8f88458eea459468815602e6a2e7f77b39bac)
@@ -102,7 +102,8 @@
  *
  * @param[in] instance Device manager structure to use.
- * @return Free address, or error code.
- */
-static usb_address_t usb_bus_get_free_address(usb_bus_t *instance)
+ * @param[out] address Free address.
+ * @return Error code.
+ */
+static int usb_bus_get_free_address(usb_bus_t *instance, usb_address_t *address)
 {
 
@@ -119,5 +120,6 @@
 	instance->last_address = new_address;
 
-	return new_address;
+	*address = new_address;
+	return EOK;
 }
 
@@ -474,5 +476,5 @@
 /** Request USB address.
  * @param instance usb_device_manager
- * @param address Pointer to requested address value, place to store new address
+ * @param[inout] address Pointer to requested address value, place to store new address
  * @parma strict Fail if the requested address is not available.
  * @return Error code.
@@ -491,9 +493,14 @@
 
 	usb_address_t addr = *address;
+	int rc;
 
 	fibril_mutex_lock(&instance->guard);
 	/* Only grant default address to strict requests */
 	if ((addr == USB_ADDRESS_DEFAULT) && !strict) {
-		addr = usb_bus_get_free_address(instance);
+		rc = usb_bus_get_free_address(instance, &addr);
+		if (rc != EOK) {
+			fibril_mutex_unlock(&instance->guard);
+			return rc;
+		}
 	}
 
@@ -503,5 +510,9 @@
 			return ENOENT;
 		}
-		addr = usb_bus_get_free_address(instance);
+		rc = usb_bus_get_free_address(instance, &addr);
+		if (rc != EOK) {
+			fibril_mutex_unlock(&instance->guard);
+			return rc;
+		}
 	}
 	if (usb_address_is_valid(addr)) {
@@ -516,5 +527,7 @@
 
 	fibril_mutex_unlock(&instance->guard);
-	return addr;
+
+	*address = addr;
+	return EOK;
 }
 
