Linux Sound subsystem development
 help / color / mirror / Atom feed
* [PATCH] ALSA: jack: Fix control leak on jack allocation failure
@ 2026-11-15 10:19 Sreeraj S Kurup
  2026-11-15 10:30 ` sashiko-bot
  2026-11-15 11:43 ` [PATCH v2] ALSA: jack: Fix jack control cleanup on error paths Sreeraj S Kurup
  0 siblings, 2 replies; 3+ messages in thread
From: Sreeraj S Kurup @ 2026-11-15 10:19 UTC (permalink / raw)
  To: perex, tiwai; +Cc: linux-kernel, linux-sound, Sreeraj S Kurup

snd_jack_new() creates an ALSA jack control before allocating the
jack structure.

If the jack structure allocation fails, the function returns
-ENOMEM without removing the previously created control.

Remove the control using snd_ctl_remove() to release the control
and its private data before returning -ENOMEM.

Initialize the control list before removal so that the
private_free callback can safely remove the list entry.

Signed-off-by: Sreeraj S Kurup <sreekuttan2156239@gmail.com>
---
 sound/core/jack.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/sound/core/jack.c b/sound/core/jack.c
index af2dc2cfbe19..92febcb42a8d 100644
--- a/sound/core/jack.c
+++ b/sound/core/jack.c
@@ -555,8 +555,14 @@ int snd_jack_new(struct snd_card *card, const char *id, int type,
 	}
 
 	jack = kzalloc_obj(struct snd_jack);
-	if (jack == NULL)
+	if (!jack) {
+		if (jack_kctl) {
+			INIT_LIST_HEAD(&jack_kctl->list);
+			snd_ctl_remove(card, jack_kctl->kctl);
+		}
+
 		return -ENOMEM;
+	}
 
 	jack->id = kstrdup(id, GFP_KERNEL);
 	if (jack->id == NULL) {
-- 
2.55.0


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

end of thread, other threads:[~2026-11-15 11:43 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-15 10:19 [PATCH] ALSA: jack: Fix control leak on jack allocation failure Sreeraj S Kurup
2026-11-15 10:30 ` sashiko-bot
2026-11-15 11:43 ` [PATCH v2] ALSA: jack: Fix jack control cleanup on error paths Sreeraj S Kurup

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox