linux-staging.lists.linux.dev archive mirror
 help / color / mirror / Atom feed
* [PATCH v4] most: core: fix resource leak in most_register_interface error paths
@ 2025-11-27 16:53 Navaneeth K
  2025-11-27 17:06 ` Dan Carpenter
  0 siblings, 1 reply; 2+ messages in thread
From: Navaneeth K @ 2025-11-27 16:53 UTC (permalink / raw)
  To: parthiban.veerasooran, christian.gromm, gregkh
  Cc: linux-staging, linux-kernel, abdun.nihaal, dan.carpenter,
	Navaneeth K

The function most_register_interface() did not correctly release resources
if it failed early (before registering the device). In these cases, it
returned an error code immediately, leaking the memory allocated for the
interface.

Fix this by initializing the device early via device_initialize() and
calling put_device() on all error paths.

The most_register_interface() is expected to call put_device() on
error which frees the resources allocated in the caller. The
put_device() either calls release_mdev() or dim2_release(),
depending on the caller.

Switch to using device_add() instead of device_register() to handle
the split initialization.

Acked-by: Abdun Nihaal <abdun.nihaal@gmail.com>
Signed-off-by: Navaneeth K <knavaneeth786@gmail.com>
---
Changes in v4:
 - Removed the '!iface->dev' NULL check as suggested by Dan Carpenter.
 - Updated commit message to explicitly explain how put_device()
   triggers the caller's release function (suggested by Dan Carpenter).

Changes in v3:
 - Dropped USB cleanup patch (already applied upstream).
 - Added Acked-by.

 drivers/most/core.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/most/core.c b/drivers/most/core.c
index da319d108ea1d..6277e6702ca8c 100644
--- a/drivers/most/core.c
+++ b/drivers/most/core.c
@@ -1286,15 +1286,19 @@ int most_register_interface(struct most_interface *iface)
 	    !iface->poison_channel || (iface->num_channels > MAX_CHANNELS))
 		return -EINVAL;
 
+	device_initialize(iface->dev);
+
 	id = ida_alloc(&mdev_id, GFP_KERNEL);
 	if (id < 0) {
 		dev_err(iface->dev, "Failed to allocate device ID\n");
+		put_device(iface->dev);
 		return id;
 	}
 
 	iface->p = kzalloc(sizeof(*iface->p), GFP_KERNEL);
 	if (!iface->p) {
 		ida_free(&mdev_id, id);
+		put_device(iface->dev);
 		return -ENOMEM;
 	}
 
@@ -1304,7 +1308,7 @@ int most_register_interface(struct most_interface *iface)
 	iface->dev->bus = &mostbus;
 	iface->dev->groups = interface_attr_groups;
 	dev_set_drvdata(iface->dev, iface);
-	if (device_register(iface->dev)) {
+	if (device_add(iface->dev)) {
 		dev_err(iface->dev, "Failed to register interface device\n");
 		kfree(iface->p);
 		put_device(iface->dev);
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH v4] most: core: fix resource leak in most_register_interface error paths
  2025-11-27 16:53 [PATCH v4] most: core: fix resource leak in most_register_interface error paths Navaneeth K
@ 2025-11-27 17:06 ` Dan Carpenter
  0 siblings, 0 replies; 2+ messages in thread
From: Dan Carpenter @ 2025-11-27 17:06 UTC (permalink / raw)
  To: Navaneeth K
  Cc: parthiban.veerasooran, christian.gromm, gregkh, linux-staging,
	linux-kernel, abdun.nihaal

On Thu, Nov 27, 2025 at 04:53:37PM +0000, Navaneeth K wrote:
> The function most_register_interface() did not correctly release resources
> if it failed early (before registering the device). In these cases, it
> returned an error code immediately, leaking the memory allocated for the
> interface.
> 
> Fix this by initializing the device early via device_initialize() and
> calling put_device() on all error paths.
> 
> The most_register_interface() is expected to call put_device() on
> error which frees the resources allocated in the caller. The
> put_device() either calls release_mdev() or dim2_release(),
> depending on the caller.
> 
> Switch to using device_add() instead of device_register() to handle
> the split initialization.
> 
> Acked-by: Abdun Nihaal <abdun.nihaal@gmail.com>
> Signed-off-by: Navaneeth K <knavaneeth786@gmail.com>
> ---

Thanks!

Reviewed-by: Dan Carpenter <dan.carpenter@linaro.org>

regards,
dan carpenter


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2025-11-27 17:06 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-27 16:53 [PATCH v4] most: core: fix resource leak in most_register_interface error paths Navaneeth K
2025-11-27 17:06 ` Dan Carpenter

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).