All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] ALSA: control led: fix memory leak in snd_ctl_led_register
@ 2021-05-28 13:17 Dongliang Mu
  2021-05-28 13:33   ` Dan Carpenter
  2021-05-31 11:01   ` Dan Carpenter
  0 siblings, 2 replies; 53+ messages in thread
From: Dongliang Mu @ 2021-05-28 13:17 UTC (permalink / raw)
  To: perex, tiwai, dan.carpenter, alsa-devel, linux-kernel
  Cc: Dongliang Mu, syzbot+08a7d8b51ea048a74ffb

The snd_ctl_led_sysfs_add and snd_ctl_led_sysfs_remove should contain
the refcount operations in pair. However, snd_ctl_led_sysfs_remove fails
to decrease the refcount to zero, which causes device_release never to
be invoked. This leads to memory leak to some resources, like struct
device_private.

Fix this by calling put_device at the end of snd_ctl_led_sysfs_remove

Reported-by: syzbot+08a7d8b51ea048a74ffb@syzkaller.appspotmail.com
Fixes: a135dfb5de1 ("ALSA: led control - add sysfs kcontrol LED marking layer")
Signed-off-by: Dongliang Mu <mudongliangabcd@gmail.com>
---
 sound/core/control_led.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/sound/core/control_led.c b/sound/core/control_led.c
index 25f57c14f294..fff2688b5019 100644
--- a/sound/core/control_led.c
+++ b/sound/core/control_led.c
@@ -371,6 +371,10 @@ static void snd_ctl_led_disconnect(struct snd_card *card)
 	snd_ctl_led_refresh();
 }
 
+static void snd_ctl_led_release(struct device *dev)
+{
+}
+
 /*
  * sysfs
  */
@@ -663,6 +667,7 @@ static void snd_ctl_led_sysfs_add(struct snd_card *card)
 		led_card->number = card->number;
 		led_card->led = led;
 		device_initialize(&led_card->dev);
+		led_card->dev.release = snd_ctl_led_release;
 		if (dev_set_name(&led_card->dev, "card%d", card->number) < 0)
 			goto cerr;
 		led_card->dev.parent = &led->dev;
@@ -701,6 +706,7 @@ static void snd_ctl_led_sysfs_remove(struct snd_card *card)
 		sysfs_remove_link(&card->ctl_dev.kobj, link_name);
 		sysfs_remove_link(&led_card->dev.kobj, "card");
 		device_del(&led_card->dev);
+		put_device(&led_card->dev);
 		kfree(led_card);
 		led->cards[card->number] = NULL;
 	}
-- 
2.25.1


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

end of thread, other threads:[~2021-06-01 15:53 UTC | newest]

Thread overview: 53+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-28 13:17 [PATCH] ALSA: control led: fix memory leak in snd_ctl_led_register Dongliang Mu
2021-05-28 13:33 ` Dan Carpenter
2021-05-28 13:33   ` Dan Carpenter
2021-05-28 13:50   ` Dongliang Mu
2021-05-28 13:50     ` Dongliang Mu
2021-05-28 14:05     ` Dan Carpenter
2021-05-28 14:05       ` Dan Carpenter
2021-05-28 21:35       ` 慕冬亮
2021-05-28 21:35         ` 慕冬亮
2021-05-31  3:03         ` Dongliang Mu
2021-05-31  3:03           ` Dongliang Mu
2021-05-31  4:40           ` Dan Carpenter
2021-05-31  4:40             ` Dan Carpenter
2021-05-31  6:20             ` Dongliang Mu
2021-05-31  6:20               ` Dongliang Mu
2021-05-31  7:03               ` Dan Carpenter
2021-05-31  7:03                 ` Dan Carpenter
2021-05-31  7:34                 ` Dongliang Mu
2021-05-31  7:34                   ` Dongliang Mu
2021-05-31  8:08                   ` Dongliang Mu
2021-05-31  8:08                     ` Dongliang Mu
2021-05-31  8:46                     ` Dan Carpenter
2021-05-31  8:46                       ` Dan Carpenter
2021-05-31  9:10                       ` Dongliang Mu
2021-05-31  9:10                         ` Dongliang Mu
2021-05-31  9:38                         ` Dan Carpenter
2021-05-31  9:38                           ` Dan Carpenter
2021-05-31 10:35                           ` Dongliang Mu
2021-05-31 10:35                             ` Dongliang Mu
2021-05-31 10:43                             ` Dan Carpenter
2021-05-31 10:43                               ` Dan Carpenter
2021-05-31 10:59                               ` Dongliang Mu
2021-05-31 10:59                                 ` Dongliang Mu
2021-05-31  8:12                   ` Dan Carpenter
2021-05-31  8:12                     ` Dan Carpenter
2021-05-31  4:36         ` Dan Carpenter
2021-05-31  4:36           ` Dan Carpenter
2021-05-31 11:01 ` Dan Carpenter
2021-05-31 11:01   ` Dan Carpenter
2021-05-31 11:07   ` Dan Carpenter
2021-05-31 11:07     ` Dan Carpenter
2021-05-31 11:11     ` Dongliang Mu
2021-05-31 11:11       ` Dongliang Mu
2021-06-01 13:17   ` Dongliang Mu
2021-06-01 13:17     ` Dongliang Mu
2021-06-01 13:46     ` Dan Carpenter
2021-06-01 13:46       ` Dan Carpenter
2021-06-01 14:19       ` Dongliang Mu
2021-06-01 14:19         ` Dongliang Mu
2021-06-01 14:43         ` Dan Carpenter
2021-06-01 14:43           ` Dan Carpenter
2021-06-01 15:52           ` Dongliang Mu
2021-06-01 15:52             ` Dongliang Mu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.