Oliver Neukum 50b7bb
From 167657a1bb5fcde53ac304ce6c564bd90a2f9185 Mon Sep 17 00:00:00 2001
Oliver Neukum 50b7bb
From: Mathias Nyman <mathias.nyman@linux.intel.com>
Oliver Neukum 50b7bb
Date: Fri, 18 Sep 2020 16:17:51 +0300
Oliver Neukum 50b7bb
Subject: [PATCH] xhci: don't create endpoint debugfs entry before ring buffer
Oliver Neukum 50b7bb
 is set.
Oliver Neukum 50b7bb
Git-commit: 167657a1bb5fcde53ac304ce6c564bd90a2f9185
Oliver Neukum 50b7bb
References: git-fixes
Oliver Neukum 50b7bb
Patch-mainline: v5.10-rc1
Oliver Neukum 50b7bb
Oliver Neukum 50b7bb
Make sure xHC completes the configure endpoint command and xhci driver
Oliver Neukum 50b7bb
sets the ring pointers correctly before we create the user readable
Oliver Neukum 50b7bb
debugfs file.
Oliver Neukum 50b7bb
Oliver Neukum 50b7bb
In theory there was a small gap where a user could have read the
Oliver Neukum 50b7bb
debugfs file and cause a NULL pointer dereference error as ring
Oliver Neukum 50b7bb
pointer was not yet set, in practise we want this change to simplify
Oliver Neukum 50b7bb
the upcoming streams debugfs support.
Oliver Neukum 50b7bb
Oliver Neukum 50b7bb
Fixes: 02b6fdc2a153 ("usb: xhci: Add debugfs interface for xHCI driver")
Oliver Neukum 50b7bb
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Oliver Neukum 50b7bb
Link: https://lore.kernel.org/r/20200918131752.16488-10-mathias.nyman@linux.intel.com
Oliver Neukum 50b7bb
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Oliver Neukum 50b7bb
Signed-off-by: Oliver Neukum <oneukum@suse.com>
Oliver Neukum 50b7bb
---
Oliver Neukum 50b7bb
 drivers/usb/host/xhci.c |    3 +--
Oliver Neukum 50b7bb
 1 file changed, 1 insertion(+), 2 deletions(-)
Oliver Neukum 50b7bb
Oliver Neukum 50b7bb
--- a/drivers/usb/host/xhci.c
Oliver Neukum 50b7bb
+++ b/drivers/usb/host/xhci.c
Oliver Neukum 50b7bb
@@ -1899,8 +1899,6 @@ static int xhci_add_endpoint(struct usb_
Oliver Neukum 50b7bb
 	/* Store the usb_device pointer for later use */
Oliver Neukum 50b7bb
 	ep->hcpriv = udev;
Oliver Neukum 50b7bb
 
Oliver Neukum 50b7bb
-	xhci_debugfs_create_endpoint(xhci, virt_dev, ep_index);
Oliver Neukum 50b7bb
-
Oliver Neukum 50b7bb
 	xhci_dbg(xhci, "add ep 0x%x, slot id %d, new drop flags = %#x, new add flags = %#x\n",
Oliver Neukum 50b7bb
 			(unsigned int) ep->desc.bEndpointAddress,
Oliver Neukum 50b7bb
 			udev->slot_id,
Oliver Neukum 50b7bb
@@ -2927,6 +2925,7 @@ static int xhci_check_bandwidth(struct u
Oliver Neukum 50b7bb
 		xhci_check_bw_drop_ep_streams(xhci, virt_dev, i);
Oliver Neukum 50b7bb
 		virt_dev->eps[i].ring = virt_dev->eps[i].new_ring;
Oliver Neukum 50b7bb
 		virt_dev->eps[i].new_ring = NULL;
Oliver Neukum 50b7bb
+		xhci_debugfs_create_endpoint(xhci, virt_dev, i);
Oliver Neukum 50b7bb
 	}
Oliver Neukum 50b7bb
 command_cleanup:
Oliver Neukum 50b7bb
 	kfree(command->completion);