From 6f78412e23d806c7566ea151e447c582349753e4 Mon Sep 17 00:00:00 2001 From: Hemant Kumar Date: Mon, 15 Apr 2019 18:11:22 -0700 Subject: [PATCH] usb: dwc3: Check return value for debugfs_create_dir() debugfs_create_dir() returns NULL when second directory is created with same name gsi-epin. Without checking return value dwc3_debugfs_create_endpoint_dir() creates endpoint files with parent as NULL. This would create files in root dir /sys/kernel/debug which remains there even after calling debugfs_remove_recursive() from dwc3_debugfs_exit(). Due to probe deferral dwc3 endpoints get freed up and re-allocated. As a result accessing endpoint files created in root dir causes access to stale dwc3 endpoint pointer. Hence check return value for debugfs_create_dir and do not create files for NULL parent. Change-Id: I44b65b77f35be1a52e71db2184a359887c25c8c9 Signed-off-by: Hemant Kumar Signed-off-by: Jack Pham --- drivers/usb/dwc3/debugfs.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c index 7c419447bea3..ee782c495213 100644 --- a/drivers/usb/dwc3/debugfs.c +++ b/drivers/usb/dwc3/debugfs.c @@ -952,6 +952,11 @@ static void dwc3_debugfs_create_endpoint_dir(struct dwc3_ep *dep, struct dentry *dir; dir = debugfs_create_dir(dep->name, parent); + if (!dir) { + pr_err("%s: failed to create dir %s\n", __func__, dep->name); + return; + } + dwc3_debugfs_create_endpoint_files(dep, dir); } @@ -1155,6 +1160,12 @@ void dwc3_debugfs_init(struct dwc3 *dwc) dwc->regset->base = dwc->regs - DWC3_GLOBALS_REGS_START; root = debugfs_create_dir(dev_name(dwc->dev), NULL); + if (!root) { + pr_err("%s: failed to create dir %s\n", __func__, + dev_name(dwc->dev)); + return; + } + dwc->root = root; debugfs_create_regset32("regdump", S_IRUGO, root, dwc->regset);