[PATCH] conf: fix memory leak on the error path in parse_args()

Takashi Iwai tiwai at suse.de
Wed Mar 17 17:03:23 CET 2021


On Wed, 17 Mar 2021 16:44:20 +0100,
Mark Hills wrote:
> 
> Having a little trouble which bisected to this patch.
> 
> First noticed it's causing Chromium to crash out one of its subprocesses 
> (stack trace below)
> 
> Can actually be replicated with a simple "aplay -L":
> 
> aplay: conf.c:2207: snd_config_delete: Assertion `config' failed.
> Aborted (core dumped)

That patch seems to have a few flaws.
Could you check the patch below covers it?


thanks,

Takashi

--- a/src/conf.c
+++ b/src/conf.c
@@ -5080,6 +5080,8 @@ static int parse_args(snd_config_t *subs, const char *str, snd_config_t *defs)
 		const char *new = str;
 		const char *tmp;
 		char *val = NULL;
+
+		sub = NULL;
 		err = parse_arg(&new, &varlen, &val);
 		if (err < 0)
 			goto _err;
@@ -5104,6 +5106,7 @@ static int parse_args(snd_config_t *subs, const char *str, snd_config_t *defs)
 		err = snd_config_search(subs, var, &sub);
 		if (err >= 0)
 			snd_config_delete(sub);
+		sub = NULL;
 		err = snd_config_search(def, "type", &typ);
 		if (err < 0) {
 		_invalid_type:
@@ -5169,7 +5172,8 @@ static int parse_args(snd_config_t *subs, const char *str, snd_config_t *defs)
 		err = snd_config_add(subs, sub);
 		if (err < 0) {
 		_err:
-			snd_config_delete(sub);
+			if (sub)
+				snd_config_delete(sub);
 			free(val);
 			return err;
 		}


More information about the Alsa-devel mailing list