Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 04587e2c authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "usb: xhci: Free leaked command in case xhci_queue_stop_endpoint fails"

parents de6917af f447dd3d
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -376,10 +376,6 @@ static int xhci_stop_device(struct xhci_hcd *xhci, int slot_id, int suspend)
	int i;

	ret = 0;
	virt_dev = xhci->devs[slot_id];
	if (!virt_dev)
		return -ENODEV;

	cmd = xhci_alloc_command(xhci, false, true, GFP_NOIO);
	if (!cmd) {
		xhci_dbg(xhci, "Couldn't allocate command structure.\n");
@@ -387,6 +383,13 @@ static int xhci_stop_device(struct xhci_hcd *xhci, int slot_id, int suspend)
	}

	spin_lock_irqsave(&xhci->lock, flags);
	virt_dev = xhci->devs[slot_id];
	if (!virt_dev) {
		spin_unlock_irqrestore(&xhci->lock, flags);
		xhci_free_command(xhci, cmd);
		return -ENODEV;
	}

	for (i = LAST_EP_INDEX; i > 0; i--) {
		if (virt_dev->eps[i].ring && virt_dev->eps[i].ring->dequeue) {
			struct xhci_command *command;
@@ -403,6 +406,7 @@ static int xhci_stop_device(struct xhci_hcd *xhci, int slot_id, int suspend)
					i, suspend);
			if (ret) {
				spin_unlock_irqrestore(&xhci->lock, flags);
				xhci_free_command(xhci, command);
				goto err_cmd_queue;
			}
		}