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

Commit 6f78412e authored by Hemant Kumar's avatar Hemant Kumar Committed by Jack Pham
Browse files

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: default avatarHemant Kumar <hemantk@codeaurora.org>
Signed-off-by: default avatarJack Pham <jackp@codeaurora.org>
parent 6f3c4037
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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);