stable.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1] driver core: Fix memory leak when adding SYNC_STATE_ONLY device links
@ 2020-05-16  8:07 Saravana Kannan
  2020-05-18  7:48 ` Saravana Kannan
  0 siblings, 1 reply; 19+ messages in thread
From: Saravana Kannan @ 2020-05-16  8:07 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Rafael J. Wysocki, Saravana Kannan
  Cc: stable, kernel-team, linux-kernel

When SYNC_STATE_ONLY support was added in commit 05ef983e0d65 ("driver
core: Add device link support for SYNC_STATE_ONLY flag"),
device_link_add() incorrectly skipped adding the new SYNC_STATE_ONLY
device link to the supplier's and consumer's "device link" list. So the
"device link" is lost forever from driver core if the caller didn't keep
track of it (typically isn't expected to).

If the same SYNC_STATE_ONLY device link is created again using
device_link_add(), instead of returning the pointer to the previously
created device link, a new device link is created and returned. This can
cause memory leaks in conjunction with fw_devlinks.

Cc: stable@vger.kernel.org
Fixes: 05ef983e0d65 ("driver core: Add device link support for SYNC_STATE_ONLY flag")
Signed-off-by: Saravana Kannan <saravanak@google.com>
---
 drivers/base/core.c | 9 +++++----
 1 file changed, 5 insertions(+), 4 deletions(-)

diff --git a/drivers/base/core.c b/drivers/base/core.c
index 84c569726d75..d36e9289b2df 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -436,12 +436,16 @@ struct device_link *device_link_add(struct device *consumer,
 	    flags & DL_FLAG_PM_RUNTIME)
 		pm_runtime_resume(supplier);
 
+	list_add_tail_rcu(&link->s_node, &supplier->links.consumers);
+	list_add_tail_rcu(&link->c_node, &consumer->links.suppliers);
+
 	if (flags & DL_FLAG_SYNC_STATE_ONLY) {
 		dev_dbg(consumer,
 			"Linked as a sync state only consumer to %s\n",
 			dev_name(supplier));
 		goto out;
 	}
+
 reorder:
 	/*
 	 * Move the consumer and all of the devices depending on it to the end
@@ -452,12 +456,9 @@ struct device_link *device_link_add(struct device *consumer,
 	 */
 	device_reorder_to_tail(consumer, NULL);
 
-	list_add_tail_rcu(&link->s_node, &supplier->links.consumers);
-	list_add_tail_rcu(&link->c_node, &consumer->links.suppliers);
-
 	dev_dbg(consumer, "Linked as a consumer to %s\n", dev_name(supplier));
 
- out:
+out:
 	device_pm_unlock();
 	device_links_write_unlock();
 
-- 
2.26.2.761.g0e0b3e54be-goog


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

end of thread, other threads:[~2020-05-26 18:08 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-05-16  8:07 [PATCH v1] driver core: Fix memory leak when adding SYNC_STATE_ONLY device links Saravana Kannan
2020-05-18  7:48 ` Saravana Kannan
2020-05-18  8:03   ` Greg Kroah-Hartman
2020-05-18 19:47     ` Saravana Kannan
2020-05-19  3:00     ` [PATCH v2] driver core: Fix SYNC_STATE_ONLY device link implementation Saravana Kannan
2020-05-19  5:48       ` Greg Kroah-Hartman
2020-05-19  6:30     ` [PATCH v3] " Saravana Kannan
2020-05-19 10:47       ` Rafael J. Wysocki
2020-05-22 18:41       ` Michael Walle
2020-05-22 22:21         ` Saravana Kannan
2020-05-22 22:47           ` Michael Walle
2020-05-25 11:31             ` Michael Walle
2020-05-25 18:39               ` Saravana Kannan
2020-05-25 19:04                 ` Michael Walle
2020-05-25 21:24                   ` Saravana Kannan
2020-05-25 21:38                     ` Michael Walle
     [not found]                       ` <20200526070518.107333-1-saravanak@google.com>
2020-05-26  7:07                         ` [PATCH v1] driver core: Update device link status correctly for SYNC_STATE_ONLY links Saravana Kannan
2020-05-26 11:04                           ` Michael Walle
2020-05-26 18:08                             ` Saravana Kannan

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