2021-06-03 11:10:07 +00:00
|
|
|
From 78212445de4c8e07873cbc7dff2abcacd031f151 Mon Sep 17 00:00:00 2001
|
|
|
|
From: Jaroslav Kysela <perex@perex.cz>
|
|
|
|
Date: Tue, 1 Jun 2021 17:47:42 +0200
|
|
|
|
Subject: [PATCH 1/2] alsactl: fix the nested iteration
|
|
|
|
|
|
|
|
There may be nested iterations for hw: card names.
|
|
|
|
Handle this card name in snd_card_iterator_sinit().
|
|
|
|
|
|
|
|
BugLink: https://github.com/alsa-project/alsa-lib/issues/142
|
|
|
|
Fixes: eefc2c6 ("alsactl: use card iterator functions for all card loops")
|
|
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
|
|
---
|
|
|
|
alsactl/utils.c | 2 ++
|
|
|
|
1 file changed, 2 insertions(+)
|
|
|
|
|
|
|
|
diff --git a/alsactl/utils.c b/alsactl/utils.c
|
|
|
|
index c79fd95..881b505 100644
|
|
|
|
--- a/alsactl/utils.c
|
|
|
|
+++ b/alsactl/utils.c
|
|
|
|
@@ -247,6 +247,8 @@ int snd_card_iterator_sinit(struct snd_card_iterator *iter, const char *cardname
|
|
|
|
int cardno = -1;
|
|
|
|
|
|
|
|
if (cardname) {
|
|
|
|
+ if (strncmp(cardname, "hw:", 3) == 0)
|
|
|
|
+ cardname += 3;
|
|
|
|
cardno = snd_card_get_index(cardname);
|
|
|
|
if (cardno < 0) {
|
|
|
|
error("Cannot find soundcard '%s'...", cardname);
|
|
|
|
--
|
|
|
|
2.30.2
|
|
|
|
|
|
|
|
|
|
|
|
From 3d7a6facd9e1f962eef6c4ba3aa4cdc22477a6ac Mon Sep 17 00:00:00 2001
|
|
|
|
From: Chao Song <chao.song@linux.intel.com>
|
|
|
|
Date: Mon, 31 May 2021 10:29:57 +0800
|
|
|
|
Subject: [PATCH 2/2] topology: fix potential null pointer from strchr
|
|
|
|
|
|
|
|
This patch adds check to the return pointer from strchr,
|
|
|
|
because it may be null and cause segment fault, if component
|
|
|
|
is not properly constructed.
|
|
|
|
|
|
|
|
Fixes: https://github.com/alsa-project/alsa-utils/pull/91
|
|
|
|
Signed-off-by: Chao Song <chao.song@linux.intel.com>
|
|
|
|
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
|
|
|
---
|
|
|
|
topology/pre-process-dapm.c | 5 +++++
|
|
|
|
topology/pre-process-object.c | 5 +++++
|
|
|
|
2 files changed, 10 insertions(+)
|
|
|
|
|
|
|
|
diff --git a/topology/pre-process-dapm.c b/topology/pre-process-dapm.c
|
|
|
|
index 450ca71..dbaf2f1 100644
|
|
|
|
--- a/topology/pre-process-dapm.c
|
|
|
|
+++ b/topology/pre-process-dapm.c
|
|
|
|
@@ -146,6 +146,11 @@ static int tplg_pp_get_widget_name(struct tplg_pre_processor *tplg_pp,
|
|
|
|
|
|
|
|
/* get class name */
|
|
|
|
args = strchr(string, '.');
|
|
|
|
+ if (!args) {
|
|
|
|
+ SNDERR("Error getting class name for %s\n", string);
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
class_name = calloc(1, strlen(string) - strlen(args) + 1);
|
|
|
|
if (!class_name)
|
|
|
|
return -ENOMEM;
|
|
|
|
diff --git a/topology/pre-process-object.c b/topology/pre-process-object.c
|
|
|
|
index 09aa375..ac8caec 100644
|
|
|
|
--- a/topology/pre-process-object.c
|
|
|
|
+++ b/topology/pre-process-object.c
|
|
|
|
@@ -492,6 +492,11 @@ static int tplg_pp_add_object_tuple_section(struct tplg_pre_processor *tplg_pp,
|
|
|
|
}
|
|
|
|
|
|
|
|
type = strchr(token_ref, '.');
|
|
|
|
+ if(!type) {
|
|
|
|
+ SNDERR("Error getting type for %s\n", token_ref);
|
|
|
|
+ return -EINVAL;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
token = calloc(1, strlen(token_ref) - strlen(type) + 1);
|
|
|
|
if (!token)
|
|
|
|
return -ENOMEM;
|
|
|
|
--
|
|
|
|
2.30.2
|
|
|
|
|