Index: uspace/drv/bus/usb/xhci/commands.c
===================================================================
--- uspace/drv/bus/usb/xhci/commands.c	(revision 9304b661127a1ac8fc68582d51192660030e75f5)
+++ uspace/drv/bus/usb/xhci/commands.c	(revision 1d4148e71edb272e8b359b29adb42093fcdb20f1)
@@ -108,4 +108,5 @@
 	 */
 	cmd->has_owner = true;
+	cmd->owns_trb = false;
 
 	return cmd;
@@ -118,5 +119,5 @@
 	if (cmd->ictx)
 		free32(cmd->ictx);
-	if (cmd->trb)
+	if (cmd->owns_trb && cmd->trb)
 		free32(cmd->trb);
 
@@ -550,4 +551,5 @@
 		command->trb = malloc32(sizeof(xhci_trb_t));
 		xhci_trb_copy(command->trb, command_trb);
+		command->owns_trb = true;
 	}
 
Index: uspace/drv/bus/usb/xhci/commands.h
===================================================================
--- uspace/drv/bus/usb/xhci/commands.h	(revision 9304b661127a1ac8fc68582d51192660030e75f5)
+++ uspace/drv/bus/usb/xhci/commands.h	(revision 1d4148e71edb272e8b359b29adb42093fcdb20f1)
@@ -54,4 +54,5 @@
 	bool completed;
 	bool has_owner;
+	bool owns_trb;
 } xhci_cmd_t;
 
