mixer: Fix a bogus free() call in the main loop

After a strsep() call, p might not point at the original allocation
anymore.

Reported by:	CHERI
Reviewed by:	christos
MFC after:	1 week
Differential Revision:	https://reviews.freebsd.org/D47266
This commit is contained in:
Mark Johnston 2024-10-23 16:55:39 +00:00
parent 9b2f2fbfcb
commit c22be0b181

View File

@ -147,7 +147,9 @@ main(int argc, char *argv[])
parse: parse:
while (argc > 0) { while (argc > 0) {
if ((p = strdup(*argv)) == NULL) char *orig;
if ((orig = p = strdup(*argv)) == NULL)
err(1, "strdup(%s)", *argv); err(1, "strdup(%s)", *argv);
/* Check if we're using the shorthand syntax for volume setting. */ /* Check if we're using the shorthand syntax for volume setting. */
@ -200,7 +202,7 @@ parse:
/* Input: `dev.control=val`. */ /* Input: `dev.control=val`. */
cp->mod(cp->parent_dev, valstr); cp->mod(cp->parent_dev, valstr);
next: next:
free(p); free(orig);
argc--; argc--;
argv++; argv++;
} }