linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Sasha Levin <sashal@kernel.org>
To: linux-kernel@vger.kernel.org, stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Bruce Chen <bruce.chen@unisoc.com>,
	Cixi Geng <cixi.geng1@unisoc.com>, Cixi Geng <gengcixi@gmail.com>,
	Thinh Nguyen <Thinh.Nguyen@synopsys.com>,
	Sasha Levin <sashal@kernel.org>,
	linux-usb@vger.kernel.org
Subject: [PATCH AUTOSEL 6.1 26/60] USB: dwc3: fix memory leak with using debugfs_lookup()
Date: Fri,  3 Mar 2023 16:42:40 -0500	[thread overview]
Message-ID: <20230303214315.1447666-26-sashal@kernel.org> (raw)
In-Reply-To: <20230303214315.1447666-1-sashal@kernel.org>

From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

[ Upstream commit be308d68785b205e483b3a0c61ba3a82da468f2c ]

When calling debugfs_lookup() the result must have dput() called on it,
otherwise the memory will leak over time.  To make things simpler, just
call debugfs_lookup_and_remove() instead which handles all of the logic
at once.

Note, the root dentry for the debugfs directory for the device needs to
be saved so we don't have to keep looking it up, which required a bit
more refactoring to properly create and remove it when needed.

Reported-by: Bruce Chen <bruce.chen@unisoc.com>
Reported-by: Cixi Geng <cixi.geng1@unisoc.com>
Tested-by: Cixi Geng <gengcixi@gmail.com>
Acked-by: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Link: https://lore.kernel.org/r/20230202152820.2409908-1-gregkh@linuxfoundation.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
 drivers/usb/dwc3/core.h    |  2 ++
 drivers/usb/dwc3/debug.h   |  3 +++
 drivers/usb/dwc3/debugfs.c | 19 ++++++++-----------
 drivers/usb/dwc3/gadget.c  |  4 +---
 4 files changed, 14 insertions(+), 14 deletions(-)

diff --git a/drivers/usb/dwc3/core.h b/drivers/usb/dwc3/core.h
index 8f9959ba9fd46..582ebd9cf9c2e 100644
--- a/drivers/usb/dwc3/core.h
+++ b/drivers/usb/dwc3/core.h
@@ -1117,6 +1117,7 @@ struct dwc3_scratchpad_array {
  *		     address.
  * @num_ep_resized: carries the current number endpoints which have had its tx
  *		    fifo resized.
+ * @debug_root: root debugfs directory for this device to put its files in.
  */
 struct dwc3 {
 	struct work_struct	drd_work;
@@ -1332,6 +1333,7 @@ struct dwc3 {
 	int			max_cfg_eps;
 	int			last_fifo_depth;
 	int			num_ep_resized;
+	struct dentry		*debug_root;
 };
 
 #define INCRX_BURST_MODE 0
diff --git a/drivers/usb/dwc3/debug.h b/drivers/usb/dwc3/debug.h
index 48b44b88dc252..8bb2c9e3b9ac6 100644
--- a/drivers/usb/dwc3/debug.h
+++ b/drivers/usb/dwc3/debug.h
@@ -414,11 +414,14 @@ static inline const char *dwc3_gadget_generic_cmd_status_string(int status)
 
 #ifdef CONFIG_DEBUG_FS
 extern void dwc3_debugfs_create_endpoint_dir(struct dwc3_ep *dep);
+extern void dwc3_debugfs_remove_endpoint_dir(struct dwc3_ep *dep);
 extern void dwc3_debugfs_init(struct dwc3 *d);
 extern void dwc3_debugfs_exit(struct dwc3 *d);
 #else
 static inline void dwc3_debugfs_create_endpoint_dir(struct dwc3_ep *dep)
 {  }
+static inline void dwc3_debugfs_remove_endpoint_dir(struct dwc3_ep *dep)
+{  }
 static inline void dwc3_debugfs_init(struct dwc3 *d)
 {  }
 static inline void dwc3_debugfs_exit(struct dwc3 *d)
diff --git a/drivers/usb/dwc3/debugfs.c b/drivers/usb/dwc3/debugfs.c
index f2b7675c7f621..850df0e6bcabf 100644
--- a/drivers/usb/dwc3/debugfs.c
+++ b/drivers/usb/dwc3/debugfs.c
@@ -873,27 +873,23 @@ static const struct dwc3_ep_file_map dwc3_ep_file_map[] = {
 	{ "GDBGEPINFO", &dwc3_ep_info_register_fops, },
 };
 
-static void dwc3_debugfs_create_endpoint_files(struct dwc3_ep *dep,
-		struct dentry *parent)
+void dwc3_debugfs_create_endpoint_dir(struct dwc3_ep *dep)
 {
+	struct dentry		*dir;
 	int			i;
 
+	dir = debugfs_create_dir(dep->name, dep->dwc->debug_root);
 	for (i = 0; i < ARRAY_SIZE(dwc3_ep_file_map); i++) {
 		const struct file_operations *fops = dwc3_ep_file_map[i].fops;
 		const char *name = dwc3_ep_file_map[i].name;
 
-		debugfs_create_file(name, 0444, parent, dep, fops);
+		debugfs_create_file(name, 0444, dir, dep, fops);
 	}
 }
 
-void dwc3_debugfs_create_endpoint_dir(struct dwc3_ep *dep)
+void dwc3_debugfs_remove_endpoint_dir(struct dwc3_ep *dep)
 {
-	struct dentry		*dir;
-	struct dentry		*root;
-
-	root = debugfs_lookup(dev_name(dep->dwc->dev), usb_debug_root);
-	dir = debugfs_create_dir(dep->name, root);
-	dwc3_debugfs_create_endpoint_files(dep, dir);
+	debugfs_lookup_and_remove(dep->name, dep->dwc->debug_root);
 }
 
 void dwc3_debugfs_init(struct dwc3 *dwc)
@@ -911,6 +907,7 @@ void dwc3_debugfs_init(struct dwc3 *dwc)
 	dwc->regset->base = dwc->regs - DWC3_GLOBALS_REGS_START;
 
 	root = debugfs_create_dir(dev_name(dwc->dev), usb_debug_root);
+	dwc->debug_root = root;
 	debugfs_create_regset32("regdump", 0444, root, dwc->regset);
 	debugfs_create_file("lsp_dump", 0644, root, dwc, &dwc3_lsp_fops);
 
@@ -929,6 +926,6 @@ void dwc3_debugfs_init(struct dwc3 *dwc)
 
 void dwc3_debugfs_exit(struct dwc3 *dwc)
 {
-	debugfs_remove(debugfs_lookup(dev_name(dwc->dev), usb_debug_root));
+	debugfs_lookup_and_remove(dev_name(dwc->dev), usb_debug_root);
 	kfree(dwc->regset);
 }
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index ed958da0e1c96..df1ce96fa2281 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -3184,9 +3184,7 @@ static void dwc3_gadget_free_endpoints(struct dwc3 *dwc)
 			list_del(&dep->endpoint.ep_list);
 		}
 
-		debugfs_remove_recursive(debugfs_lookup(dep->name,
-				debugfs_lookup(dev_name(dep->dwc->dev),
-					       usb_debug_root)));
+		dwc3_debugfs_remove_endpoint_dir(dep);
 		kfree(dep);
 	}
 }
-- 
2.39.2


  parent reply	other threads:[~2023-03-03 21:46 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-03 21:42 [PATCH AUTOSEL 6.1 01/60] IB/hfi1: Update RMT size calculation Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 02/60] iommu/amd: Fix error handling for pdev_pri_ats_enable() Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 03/60] PCI/ACPI: Account for _S0W of the target bridge in acpi_pci_bridge_d3() Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 04/60] media: uvcvideo: Remove format descriptions Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 05/60] media: uvcvideo: Handle cameras with invalid descriptors Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 06/60] media: uvcvideo: Handle errors from calls to usb_string Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 07/60] media: uvcvideo: Quirk for autosuspend in Logitech B910 and C910 Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 08/60] media: uvcvideo: Silence memcpy() run-time false positive warnings Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 09/60] USB: fix memory leak with using debugfs_lookup() Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 10/60] cacheinfo: Fix shared_cpu_map to handle shared caches at different levels Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 11/60] staging: emxx_udc: Add checks for dma_alloc_coherent() Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 12/60] tty: fix out-of-bounds access in tty_driver_lookup_tty() Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 13/60] tty: serial: fsl_lpuart: disable the CTS when send break signal Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 14/60] serial: sc16is7xx: setup GPIO controller later in probe Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 15/60] mei: bus-fixup:upon error print return values of send and receive Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 16/60] parport_pc: Set up mode and ECR masks for Oxford Semiconductor devices Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 17/60] tools/iio/iio_utils:fix memory leak Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 18/60] bus: mhi: ep: Fix the debug message for MHI_PKT_TYPE_RESET_CHAN_CMD cmd Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 19/60] iio: accel: mma9551_core: Prevent uninitialized variable in mma9551_read_status_word() Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 20/60] iio: accel: mma9551_core: Prevent uninitialized variable in mma9551_read_config_word() Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 21/60] media: uvcvideo: Add GUID for BGRA/X 8:8:8:8 Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 22/60] firmware: coreboot: framebuffer: Ignore reserved pixel color bits Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 23/60] soundwire: bus_type: Avoid lockdep assert in sdw_drv_probe() Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 24/60] PCI: loongson: Prevent LS7A MRRS increases Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 25/60] staging: pi433: fix memory leak with using debugfs_lookup() Sasha Levin
2023-03-03 21:42 ` Sasha Levin [this message]
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 27/60] USB: chipidea: " Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 28/60] USB: ULPI: " Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 29/60] USB: uhci: " Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 30/60] USB: sl811: " Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 31/60] USB: fotg210: " Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 32/60] USB: isp116x: " Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 33/60] USB: isp1362: " Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 34/60] USB: gadget: gr_udc: " Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 35/60] USB: gadget: bcm63xx_udc: " Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 36/60] USB: gadget: lpc32xx_udc: " Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 37/60] USB: gadget: pxa25x_udc: " Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 38/60] USB: gadget: pxa27x_udc: " Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 39/60] usb: host: xhci: mvebu: Iterate over array indexes instead of using pointer math Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 40/60] USB: ene_usb6250: Allocate enough memory for full object Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 41/60] usb: uvc: Enumerate valid values for color matching Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 42/60] usb: gadget: uvc: Make bSourceID read/write Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 43/60] PCI: Align extra resources for hotplug bridges properly Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 44/60] PCI: Take other bus devices into account when distributing resources Sasha Levin
2023-03-03 21:42 ` [PATCH AUTOSEL 6.1 45/60] PCI: Distribute available resources for root buses, too Sasha Levin
2023-03-03 21:43 ` [PATCH AUTOSEL 6.1 46/60] tty: pcn_uart: fix memory leak with using debugfs_lookup() Sasha Levin
2023-03-03 21:43 ` [PATCH AUTOSEL 6.1 47/60] misc: vmw_balloon: " Sasha Levin
2023-03-03 21:43 ` [PATCH AUTOSEL 6.1 48/60] drivers: base: component: " Sasha Levin
2023-03-03 21:43 ` [PATCH AUTOSEL 6.1 49/60] drivers: base: dd: " Sasha Levin
2023-03-03 21:43 ` [PATCH AUTOSEL 6.1 50/60] kernel/time/test_udelay.c: " Sasha Levin
2023-03-03 21:43 ` [PATCH AUTOSEL 6.1 51/60] kernel/power/energy_model.c: " Sasha Levin
2023-03-03 21:43 ` [PATCH AUTOSEL 6.1 52/60] kernel/fail_function: " Sasha Levin
2023-03-03 21:43 ` [PATCH AUTOSEL 6.1 53/60] PCI: loongson: Add more devices that need MRRS quirk Sasha Levin
2023-03-03 21:43 ` [PATCH AUTOSEL 6.1 54/60] PCI: Add ACS quirk for Wangxun NICs Sasha Levin
2023-03-03 21:43 ` [PATCH AUTOSEL 6.1 55/60] PCI: pciehp: Add Qualcomm quirk for Command Completed erratum Sasha Levin
2023-03-03 21:43 ` [PATCH AUTOSEL 6.1 56/60] phy: rockchip-typec: Fix unsigned comparison with less than zero Sasha Levin
2023-03-03 21:43 ` [PATCH AUTOSEL 6.1 57/60] RDMA/cma: Distinguish between sockaddr_in and sockaddr_in6 by size Sasha Levin
2023-03-03 21:43 ` [PATCH AUTOSEL 6.1 58/60] iommu: Attach device group to old domain in error path Sasha Levin
2023-03-03 21:43 ` [PATCH AUTOSEL 6.1 59/60] soundwire: cadence: Remove wasted space in response_buf Sasha Levin
2023-03-03 21:43 ` [PATCH AUTOSEL 6.1 60/60] soundwire: cadence: Drain the RX FIFO after an IO timeout Sasha Levin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230303214315.1447666-26-sashal@kernel.org \
    --to=sashal@kernel.org \
    --cc=Thinh.Nguyen@synopsys.com \
    --cc=bruce.chen@unisoc.com \
    --cc=cixi.geng1@unisoc.com \
    --cc=gengcixi@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).