Accepting request 865334 from home:tiwai:branches:multimedia:libs

- Backport upstream fixes:
  yet more PCM plugin fixes, topology fixes/cleanups, UAF fix in
  UCM (bsc#1181194):
  0004-topology-use-inclusive-language-for-bclk.patch
  0005-topology-use-inclusive-language-for-fsync.patch
  0006-topology-use-inclusive-language-in-documentation.patch
  0034-ucm-fix-possible-memory-leak-in-parse_verb_file.patch
  0035-topology-tplg_pprint_integer-fix-coverity-uninitaliz.patch
  0036-topology-tplg_add_widget_object-do-not-use-invalid-e.patch
  0037-topology-tplg_decode_pcm-add-missing-log-argument-co.patch
  0038-topology-parse_tuple_set-remove-dead-condition-code.patch
  0039-ucm-uc_mgr_substitute_tree-fix-use-after-free.patch
  0040-topology-sort_config-cleanups-use-goto-for-the-error.patch
  0041-conf-USB-add-Xonar-U7-MKII-to-USB-Audio.pcm.iec958_d.patch
  0042-pcm_plugin-set-the-initial-hw_ptr-appl_ptr-from-the-.patch
  0043-pcm-dmix-dshare-delay-calculation-fixes-and-cleanups.patch
  0044-topology-fix-parse_tuple_set-remove-dead-condition-c.patch

OBS-URL: https://build.opensuse.org/request/show/865334
OBS-URL: https://build.opensuse.org/package/show/multimedia:libs/alsa?expand=0&rev=292
This commit is contained in:
Takashi Iwai 2021-01-21 10:20:59 +00:00 committed by Git OBS Bridge
parent 197f321105
commit 2d37bad8df
16 changed files with 796 additions and 0 deletions

View File

@ -0,0 +1,148 @@
From 39bd0e1a5be3620f9123f7fe72ffa6cb7d463b21 Mon Sep 17 00:00:00 2001
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Date: Thu, 12 Nov 2020 10:29:38 -0600
Subject: [PATCH 04/44] topology: use inclusive language for bclk
use bclk_provider for structure fields, 'codec_provider' and
'codec_consumer' for options and modify #defines to use CP and CC
suffixes.
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
include/sound/uapi/asoc.h | 11 +++++++----
include/topology.h | 2 +-
src/topology/pcm.c | 36 ++++++++++++++++++++++++++----------
3 files changed, 34 insertions(+), 15 deletions(-)
diff --git a/include/sound/uapi/asoc.h b/include/sound/uapi/asoc.h
index 4efb4ec42500..ceafb1a90b98 100644
--- a/include/sound/uapi/asoc.h
+++ b/include/sound/uapi/asoc.h
@@ -169,10 +169,13 @@
#define SND_SOC_TPLG_LNK_FLGBIT_VOICE_WAKEUP (1 << 3)
/* DAI topology BCLK parameter
- * For the backwards capability, by default codec is bclk master
+ * For the backwards capability, by default codec is bclk provider
*/
-#define SND_SOC_TPLG_BCLK_CM 0 /* codec is bclk master */
-#define SND_SOC_TPLG_BCLK_CS 1 /* codec is bclk slave */
+#define SND_SOC_TPLG_BCLK_CP 0 /* codec is bclk provider */
+#define SND_SOC_TPLG_BCLK_CC 1 /* codec is bclk consumer */
+/* keep previous definitions for compatibility */
+#define SND_SOC_TPLG_BCLK_CM SND_SOC_TPLG_BCLK_CP
+#define SND_SOC_TPLG_BCLK_CS SND_SOC_TPLG_BCLK_CC
/* DAI topology FSYNC parameter
* For the backwards capability, by default codec is fsync master
@@ -335,7 +338,7 @@ struct snd_soc_tplg_hw_config {
__u8 clock_gated; /* SND_SOC_TPLG_DAI_CLK_GATE_ value */
__u8 invert_bclk; /* 1 for inverted BCLK, 0 for normal */
__u8 invert_fsync; /* 1 for inverted frame clock, 0 for normal */
- __u8 bclk_master; /* SND_SOC_TPLG_BCLK_ value */
+ __u8 bclk_provider; /* SND_SOC_TPLG_BCLK_ value */
__u8 fsync_master; /* SND_SOC_TPLG_FSYNC_ value */
__u8 mclk_direction; /* SND_SOC_TPLG_MCLK_ value */
__le16 reserved; /* for 32bit alignment */
diff --git a/include/topology.h b/include/topology.h
index 1f52e66ea7b0..6c9706496fc3 100644
--- a/include/topology.h
+++ b/include/topology.h
@@ -1028,7 +1028,7 @@ struct snd_tplg_hw_config_template {
unsigned char clock_gated; /* SND_SOC_TPLG_DAI_CLK_GATE_ value */
unsigned char invert_bclk; /* 1 for inverted BCLK, 0 for normal */
unsigned char invert_fsync; /* 1 for inverted frame clock, 0 for normal */
- unsigned char bclk_master; /* SND_SOC_TPLG_BCLK_ value */
+ unsigned char bclk_provider; /* SND_SOC_TPLG_BCLK_ value */
unsigned char fsync_master; /* SND_SOC_TPLG_FSYNC_ value */
unsigned char mclk_direction; /* SND_SOC_TPLG_MCLK_ value */
unsigned short reserved; /* for 32bit alignment */
diff --git a/src/topology/pcm.c b/src/topology/pcm.c
index 191b7a0a92da..f05df348fa23 100644
--- a/src/topology/pcm.c
+++ b/src/topology/pcm.c
@@ -1411,6 +1411,7 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
snd_config_t *n;
const char *id, *val = NULL;
int ret, ival;
+ bool provider_legacy;
elem = tplg_elem_new_common(tplg, cfg, NULL, SND_TPLG_TYPE_HW_CONFIG);
if (!elem)
@@ -1451,8 +1452,15 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
continue;
}
- if (strcmp(id, "bclk") == 0 ||
- strcmp(id, "bclk_master") == 0) {
+ provider_legacy = false;
+ if (strcmp(id, "bclk_master") == 0) {
+ SNDERR("deprecated option %s, please use 'bclk'\n", id);
+ provider_legacy = true;
+ }
+
+ if (provider_legacy ||
+ strcmp(id, "bclk") == 0) {
+
if (snd_config_get_string(n, &val) < 0)
return -EINVAL;
@@ -1462,11 +1470,19 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
*/
SNDERR("deprecated bclk value '%s'", val);
- hw_cfg->bclk_master = SND_SOC_TPLG_BCLK_CS;
+ hw_cfg->bclk_provider = SND_SOC_TPLG_BCLK_CC;
} else if (!strcmp(val, "codec_slave")) {
- hw_cfg->bclk_master = SND_SOC_TPLG_BCLK_CS;
+ SNDERR("deprecated bclk value '%s', use 'codec_consumer'", val);
+
+ hw_cfg->bclk_provider = SND_SOC_TPLG_BCLK_CC;
+ } else if (!strcmp(val, "codec_consumer")) {
+ hw_cfg->bclk_provider = SND_SOC_TPLG_BCLK_CC;
} else if (!strcmp(val, "codec_master")) {
- hw_cfg->bclk_master = SND_SOC_TPLG_BCLK_CM;
+ SNDERR("deprecated bclk value '%s', use 'codec_provider", val);
+
+ hw_cfg->bclk_provider = SND_SOC_TPLG_BCLK_CP;
+ } else if (!strcmp(val, "codec_provider")) {
+ hw_cfg->bclk_provider = SND_SOC_TPLG_BCLK_CP;
}
continue;
}
@@ -1623,10 +1639,10 @@ int tplg_save_hw_config(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
if (err >= 0 && hc->fmt)
err = tplg_save_printf(dst, pfx, "\tformat '%s'\n",
get_audio_hw_format_name(hc->fmt));
- if (err >= 0 && hc->bclk_master)
+ if (err >= 0 && hc->bclk_provider)
err = tplg_save_printf(dst, pfx, "\tbclk '%s'\n",
- hc->bclk_master == SND_SOC_TPLG_BCLK_CS ?
- "codec_slave" : "codec_master");
+ hc->bclk_provider == SND_SOC_TPLG_BCLK_CC ?
+ "codec_consumer" : "codec_provider");
if (err >= 0 && hc->bclk_rate)
err = tplg_save_printf(dst, pfx, "\tbclk_freq %u\n",
hc->bclk_rate);
@@ -1791,7 +1807,7 @@ static int set_link_hw_config(struct snd_soc_tplg_hw_config *cfg,
cfg->clock_gated = tpl->clock_gated;
cfg->invert_bclk = tpl->invert_bclk;
cfg->invert_fsync = tpl->invert_fsync;
- cfg->bclk_master = tpl->bclk_master;
+ cfg->bclk_provider = tpl->bclk_provider;
cfg->fsync_master = tpl->fsync_master;
cfg->mclk_direction = tpl->mclk_direction;
cfg->reserved = tpl->reserved;
@@ -2174,7 +2190,7 @@ next:
hw->clock_gated = link->hw_config[i].clock_gated;
hw->invert_bclk = link->hw_config[i].invert_bclk;
hw->invert_fsync = link->hw_config[i].invert_fsync;
- hw->bclk_master = link->hw_config[i].bclk_master;
+ hw->bclk_provider = link->hw_config[i].bclk_provider;
hw->fsync_master = link->hw_config[i].fsync_master;
hw->mclk_direction = link->hw_config[i].mclk_direction;
hw->mclk_rate = link->hw_config[i].mclk_rate;
--
2.26.2

View File

@ -0,0 +1,141 @@
From 706192341d1d0bbb906d690b227b9dee5c1fc4b5 Mon Sep 17 00:00:00 2001
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Date: Thu, 12 Nov 2020 10:29:39 -0600
Subject: [PATCH 05/44] topology: use inclusive language for fsync
use fsync_provider for structure fields, 'codec_provider' and
'codec_consumer' for options and modify #defines to use CP and CC
suffixes.
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
include/sound/uapi/asoc.h | 11 +++++++----
include/topology.h | 2 +-
src/topology/pcm.c | 37 ++++++++++++++++++++++++++-----------
3 files changed, 34 insertions(+), 16 deletions(-)
diff --git a/include/sound/uapi/asoc.h b/include/sound/uapi/asoc.h
index ceafb1a90b98..f32c56972d3f 100644
--- a/include/sound/uapi/asoc.h
+++ b/include/sound/uapi/asoc.h
@@ -178,10 +178,13 @@
#define SND_SOC_TPLG_BCLK_CS SND_SOC_TPLG_BCLK_CC
/* DAI topology FSYNC parameter
- * For the backwards capability, by default codec is fsync master
+ * For the backwards capability, by default codec is fsync provider
*/
-#define SND_SOC_TPLG_FSYNC_CM 0 /* codec is fsync master */
-#define SND_SOC_TPLG_FSYNC_CS 1 /* codec is fsync slave */
+#define SND_SOC_TPLG_FSYNC_CP 0 /* codec is fsync provider */
+#define SND_SOC_TPLG_FSYNC_CC 1 /* codec is fsync consumer */
+/* keep previous definitions for compatibility */
+#define SND_SOC_TPLG_FSYNC_CM SND_SOC_TPLG_FSYNC_CP
+#define SND_SOC_TPLG_FSYNC_CS SND_SOC_TPLG_FSYNC_CC
/*
* Block Header.
@@ -339,7 +342,7 @@ struct snd_soc_tplg_hw_config {
__u8 invert_bclk; /* 1 for inverted BCLK, 0 for normal */
__u8 invert_fsync; /* 1 for inverted frame clock, 0 for normal */
__u8 bclk_provider; /* SND_SOC_TPLG_BCLK_ value */
- __u8 fsync_master; /* SND_SOC_TPLG_FSYNC_ value */
+ __u8 fsync_provider; /* SND_SOC_TPLG_FSYNC_ value */
__u8 mclk_direction; /* SND_SOC_TPLG_MCLK_ value */
__le16 reserved; /* for 32bit alignment */
__le32 mclk_rate; /* MCLK or SYSCLK freqency in Hz */
diff --git a/include/topology.h b/include/topology.h
index 6c9706496fc3..4ade20df0751 100644
--- a/include/topology.h
+++ b/include/topology.h
@@ -1029,7 +1029,7 @@ struct snd_tplg_hw_config_template {
unsigned char invert_bclk; /* 1 for inverted BCLK, 0 for normal */
unsigned char invert_fsync; /* 1 for inverted frame clock, 0 for normal */
unsigned char bclk_provider; /* SND_SOC_TPLG_BCLK_ value */
- unsigned char fsync_master; /* SND_SOC_TPLG_FSYNC_ value */
+ unsigned char fsync_provider; /* SND_SOC_TPLG_FSYNC_ value */
unsigned char mclk_direction; /* SND_SOC_TPLG_MCLK_ value */
unsigned short reserved; /* for 32bit alignment */
unsigned int mclk_rate; /* MCLK or SYSCLK freqency in Hz */
diff --git a/src/topology/pcm.c b/src/topology/pcm.c
index f05df348fa23..c8f418621323 100644
--- a/src/topology/pcm.c
+++ b/src/topology/pcm.c
@@ -1504,8 +1504,15 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
continue;
}
- if (strcmp(id, "fsync") == 0 ||
- strcmp(id, "fsync_master") == 0) {
+ provider_legacy = false;
+ if (strcmp(id, "fsync_master") == 0) {
+ SNDERR("deprecated option %s, please use 'fsync'\n", id);
+ provider_legacy = true;
+ }
+
+ if (provider_legacy ||
+ strcmp(id, "fsync") == 0) {
+
if (snd_config_get_string(n, &val) < 0)
return -EINVAL;
@@ -1515,11 +1522,19 @@ int tplg_parse_hw_config(snd_tplg_t *tplg, snd_config_t *cfg,
*/
SNDERR("deprecated fsync value '%s'", val);
- hw_cfg->fsync_master = SND_SOC_TPLG_FSYNC_CS;
+ hw_cfg->fsync_provider = SND_SOC_TPLG_FSYNC_CC;
} else if (!strcmp(val, "codec_slave")) {
- hw_cfg->fsync_master = SND_SOC_TPLG_FSYNC_CS;
+ SNDERR("deprecated fsync value '%s', use 'codec_consumer'", val);
+
+ hw_cfg->fsync_provider = SND_SOC_TPLG_FSYNC_CC;
+ } else if (!strcmp(val, "codec_consumer")) {
+ hw_cfg->fsync_provider = SND_SOC_TPLG_FSYNC_CC;
} else if (!strcmp(val, "codec_master")) {
- hw_cfg->fsync_master = SND_SOC_TPLG_FSYNC_CM;
+ SNDERR("deprecated fsync value '%s', use 'codec_provider'", val);
+
+ hw_cfg->fsync_provider = SND_SOC_TPLG_FSYNC_CP;
+ } else if (!strcmp(val, "codec_provider")) {
+ hw_cfg->fsync_provider = SND_SOC_TPLG_FSYNC_CP;
}
continue;
}
@@ -1648,10 +1663,10 @@ int tplg_save_hw_config(snd_tplg_t *tplg ATTRIBUTE_UNUSED,
hc->bclk_rate);
if (err >= 0 && hc->invert_bclk)
err = tplg_save_printf(dst, pfx, "\tbclk_invert 1\n");
- if (err >= 0 && hc->fsync_master)
- err = tplg_save_printf(dst, pfx, "\tfsync_master '%s'\n",
- hc->fsync_master == SND_SOC_TPLG_FSYNC_CS ?
- "codec_slave" : "codec_master");
+ if (err >= 0 && hc->fsync_provider)
+ err = tplg_save_printf(dst, pfx, "\tfsync_provider '%s'\n",
+ hc->fsync_provider == SND_SOC_TPLG_FSYNC_CC ?
+ "codec_consumer" : "codec_provider");
if (err >= 0 && hc->fsync_rate)
err = tplg_save_printf(dst, pfx, "\tfsync_freq %u\n",
hc->fsync_rate);
@@ -1808,7 +1823,7 @@ static int set_link_hw_config(struct snd_soc_tplg_hw_config *cfg,
cfg->invert_bclk = tpl->invert_bclk;
cfg->invert_fsync = tpl->invert_fsync;
cfg->bclk_provider = tpl->bclk_provider;
- cfg->fsync_master = tpl->fsync_master;
+ cfg->fsync_provider = tpl->fsync_provider;
cfg->mclk_direction = tpl->mclk_direction;
cfg->reserved = tpl->reserved;
cfg->mclk_rate = tpl->mclk_rate;
@@ -2191,7 +2206,7 @@ next:
hw->invert_bclk = link->hw_config[i].invert_bclk;
hw->invert_fsync = link->hw_config[i].invert_fsync;
hw->bclk_provider = link->hw_config[i].bclk_provider;
- hw->fsync_master = link->hw_config[i].fsync_master;
+ hw->fsync_provider = link->hw_config[i].fsync_provider;
hw->mclk_direction = link->hw_config[i].mclk_direction;
hw->mclk_rate = link->hw_config[i].mclk_rate;
hw->bclk_rate = link->hw_config[i].bclk_rate;
--
2.26.2

View File

@ -0,0 +1,31 @@
From e5c350d7bc6f3d45702059c0ae8d32b3603273c1 Mon Sep 17 00:00:00 2001
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Date: Thu, 12 Nov 2020 10:29:40 -0600
Subject: [PATCH 06/44] topology: use inclusive language in documentation
Use codec_provider and codec_consumer for bclk and fsync
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
include/topology.h | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/topology.h b/include/topology.h
index 4ade20df0751..d1feee4d9e25 100644
--- a/include/topology.h
+++ b/include/topology.h
@@ -658,8 +658,8 @@ extern "C" {
*
* id "1" # used for binding to the config
* format "I2S" # physical audio format.
- * bclk "master" # Platform is master of bit clock
- * fsync "slave" # Platform is slave of fsync
+ * bclk "codec_provider" # Codec provides the bit clock
+ * fsync "codec_consumer" # Codec follows the fsync
* }
* </pre>
*
--
2.26.2

View File

@ -0,0 +1,26 @@
From 437b5b3aae8b1d9f65289f563deb0fa6356a0fa6 Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
Date: Thu, 7 Jan 2021 17:32:11 +0100
Subject: [PATCH 34/44] ucm: fix possible memory leak in parse_verb_file()
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
src/ucm/parser.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/ucm/parser.c b/src/ucm/parser.c
index 75b78826f260..c8bee1f2e1dd 100644
--- a/src/ucm/parser.c
+++ b/src/ucm/parser.c
@@ -1575,7 +1575,7 @@ static int parse_verb_file(snd_use_case_mgr_t *uc_mgr,
/* in-place evaluation */
err = uc_mgr_evaluate_inplace(uc_mgr, cfg);
if (err < 0)
- return err;
+ goto _err;
/* parse master config sections */
snd_config_for_each(i, next, cfg) {
--
2.26.2

View File

@ -0,0 +1,27 @@
From d0bb8f84c92357bfd0e024efe5f6d53a963c4d7a Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
Date: Thu, 7 Jan 2021 17:34:00 +0100
Subject: [PATCH 35/44] topology: tplg_pprint_integer() fix coverity
uninitalized variable error
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
src/topology/save.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/topology/save.c b/src/topology/save.c
index c7a5a801372e..f7af7af3e8c2 100644
--- a/src/topology/save.c
+++ b/src/topology/save.c
@@ -133,6 +133,8 @@ static int tplg_pprint_integer(snd_config_t *n, char **ret)
if (llval < INT_MIN || llval > UINT_MAX)
return snd_config_get_ascii(n, ret);
lval = llval;
+ } else {
+ lval = 0;
}
err = tplg_nice_value_format(buf, sizeof(buf), (unsigned int)lval);
if (err < 0)
--
2.26.2

View File

@ -0,0 +1,26 @@
From b8764a061b83284be60adc01c1f7b035c4484ace Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
Date: Thu, 7 Jan 2021 17:36:04 +0100
Subject: [PATCH 36/44] topology: tplg_add_widget_object() - do not use invalid
elem_ctl
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
src/topology/dapm.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/topology/dapm.c b/src/topology/dapm.c
index 92dc01aa864d..f6a84a6035ce 100644
--- a/src/topology/dapm.c
+++ b/src/topology/dapm.c
@@ -836,6 +836,7 @@ int tplg_add_widget_object(snd_tplg_t *tplg, snd_tplg_obj_template_t *t)
default:
SNDERR("widget %s: invalid type %d for ctl %d",
wt->name, ct->type, i);
+ ret = -EINVAL;
break;
}
--
2.26.2

View File

@ -0,0 +1,27 @@
From 0dbaba95f4bc59602bf2d3fb12a60db7444e5892 Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
Date: Thu, 7 Jan 2021 17:38:50 +0100
Subject: [PATCH 37/44] topology: tplg_decode_pcm() - add missing log argument
(compress)
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
src/topology/pcm.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/topology/pcm.c b/src/topology/pcm.c
index c8f418621323..a473b59b4c5c 100644
--- a/src/topology/pcm.c
+++ b/src/topology/pcm.c
@@ -2020,7 +2020,7 @@ next:
pt->playback = pcm->playback;
pt->capture = pcm->capture;
pt->compress = pcm->compress;
- tplg_log(tplg, 'D', pos, "pcm: playback %d capture %d compress",
+ tplg_log(tplg, 'D', pos, "pcm: playback %d capture %d compress %d",
pt->playback, pt->capture, pt->compress);
pt->num_streams = pcm->num_streams;
pt->flag_mask = pcm->flag_mask;
--
2.26.2

View File

@ -0,0 +1,27 @@
From 51e1d486ce4535923692bd1d7e59d5aa3a29cd50 Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
Date: Thu, 7 Jan 2021 17:40:42 +0100
Subject: [PATCH 38/44] topology: parse_tuple_set() - remove dead condition
code
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
src/topology/data.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/topology/data.c b/src/topology/data.c
index c2931bd2bbb3..5633cdc34dd9 100644
--- a/src/topology/data.c
+++ b/src/topology/data.c
@@ -860,7 +860,7 @@ static int parse_tuple_set(snd_config_t *cfg,
}
if ((type == SND_SOC_TPLG_TUPLE_TYPE_WORD
- && tuple_val > UINT_MAX)
+ /* && tuple_val > UINT_MAX */)
|| (type == SND_SOC_TPLG_TUPLE_TYPE_SHORT
&& tuple_val > USHRT_MAX)
|| (type == SND_SOC_TPLG_TUPLE_TYPE_BYTE
--
2.26.2

View File

@ -0,0 +1,31 @@
From 3f63dc26445ae7c215e48a57af83b6da325f166d Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
Date: Thu, 7 Jan 2021 17:41:38 +0100
Subject: [PATCH 39/44] ucm: uc_mgr_substitute_tree() fix use after free
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
src/ucm/ucm_subs.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/ucm/ucm_subs.c b/src/ucm/ucm_subs.c
index f608bb0955a6..df6d736fc820 100644
--- a/src/ucm/ucm_subs.c
+++ b/src/ucm/ucm_subs.c
@@ -417,11 +417,12 @@ int uc_mgr_substitute_tree(snd_use_case_mgr_t *uc_mgr, snd_config_t *node)
if (err < 0)
return err;
err = snd_config_set_id(node, s);
- free(s);
if (err < 0) {
uc_error("unable to set substituted id '%s' (old id '%s')", s, id);
+ free(s);
return err;
}
+ free(s);
}
if (snd_config_get_type(node) != SND_CONFIG_TYPE_COMPOUND) {
if (snd_config_get_type(node) == SND_CONFIG_TYPE_STRING) {
--
2.26.2

View File

@ -0,0 +1,55 @@
From 45f503632acf24877c466a7c1c74d8a26414bf3e Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
Date: Thu, 7 Jan 2021 17:45:27 +0100
Subject: [PATCH 40/44] topology: sort_config() cleanups - use goto for the
error path
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
src/topology/save.c | 15 +++++++--------
1 file changed, 7 insertions(+), 8 deletions(-)
diff --git a/src/topology/save.c b/src/topology/save.c
index f7af7af3e8c2..fecbc6a5dfa8 100644
--- a/src/topology/save.c
+++ b/src/topology/save.c
@@ -180,29 +180,28 @@ static snd_config_t *sort_config(const char *id, snd_config_t *src)
}
if (array <= 0)
qsort(a, count, sizeof(a[0]), _compar);
- if (snd_config_make_compound(&dst, id, count == 1)) {
- free(a);
- return NULL;
- }
+ if (snd_config_make_compound(&dst, id, count == 1))
+ goto lerr;
for (index = 0; index < count; index++) {
snd_config_t *s = a[index];
const char *id2;
if (snd_config_get_id(s, &id2)) {
snd_config_delete(dst);
- free(a);
- return NULL;
+ goto lerr;
}
s = sort_config(id2, s);
if (s == NULL || snd_config_add(dst, s)) {
if (s)
snd_config_delete(s);
snd_config_delete(dst);
- free(a);
- return NULL;
+ goto lerr;
}
}
free(a);
return dst;
+lerr:
+ free(a);
+ return NULL;
}
static int tplg_check_quoted(const unsigned char *p)
--
2.26.2

View File

@ -0,0 +1,27 @@
From 93752fb4de397554e92a4eb9079f77dabaec7d7f Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
Date: Thu, 7 Jan 2021 17:49:25 +0100
Subject: [PATCH 41/44] conf: USB - add "Xonar U7 MKII" to
USB-Audio.pcm.iec958_device
BugLink: https://github.com/alsa-project/alsa-lib/issues/100
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
src/conf/cards/USB-Audio.conf | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/conf/cards/USB-Audio.conf b/src/conf/cards/USB-Audio.conf
index 9b64af3c0da9..b1b74b02cb1d 100644
--- a/src/conf/cards/USB-Audio.conf
+++ b/src/conf/cards/USB-Audio.conf
@@ -39,6 +39,7 @@ USB-Audio.pcm.iec958_device {
# "NoiseBlaster 3000" 42
"USB Sound Blaster HD" 1
"Xonar U7" 1
+ "Xonar U7 MKII" 1
"ASUS XONAR U5" 1
"XONAR U5" 1
"XONAR SOUND CARD" 1
--
2.26.2

View File

@ -0,0 +1,77 @@
From 644514e85da169670e4a490b7b15b5ecfcec92c0 Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
Date: Mon, 18 Jan 2021 21:09:43 +0100
Subject: [PATCH 42/44] pcm_plugin: set the initial hw_ptr/appl_ptr from the
child pcm
The direct plugins (dmix & etc.) sets own initial
hw_ptr and appl_ptr. Use this initial settings
to export correct values in snd_pcm_status().
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
src/pcm/pcm_plugin.c | 32 +++++++++++++++++---------------
1 file changed, 17 insertions(+), 15 deletions(-)
diff --git a/src/pcm/pcm_plugin.c b/src/pcm/pcm_plugin.c
index 7ed6f25a2eea..ff254eba9988 100644
--- a/src/pcm/pcm_plugin.c
+++ b/src/pcm/pcm_plugin.c
@@ -146,15 +146,14 @@ static int snd_pcm_plugin_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp)
return 0;
}
-static int snd_pcm_plugin_prepare(snd_pcm_t *pcm)
+static int snd_pcm_plugin_call_init_cb(snd_pcm_t *pcm, snd_pcm_plugin_t *plugin)
{
- snd_pcm_plugin_t *plugin = pcm->private_data;
+ snd_pcm_t *slave = plugin->gen.slave;
int err;
- err = snd_pcm_prepare(plugin->gen.slave);
- if (err < 0)
- return err;
- *pcm->hw.ptr = 0;
- *pcm->appl.ptr = 0;
+
+ assert(pcm->boundary == slave->boundary);
+ *pcm->hw.ptr = *slave->hw.ptr;
+ *pcm->appl.ptr = *slave->appl.ptr;
if (plugin->init) {
err = plugin->init(pcm);
if (err < 0)
@@ -163,6 +162,16 @@ static int snd_pcm_plugin_prepare(snd_pcm_t *pcm)
return 0;
}
+static int snd_pcm_plugin_prepare(snd_pcm_t *pcm)
+{
+ snd_pcm_plugin_t *plugin = pcm->private_data;
+ int err;
+ err = snd_pcm_prepare(plugin->gen.slave);
+ if (err < 0)
+ return err;
+ return snd_pcm_plugin_call_init_cb(pcm, plugin);
+}
+
static int snd_pcm_plugin_reset(snd_pcm_t *pcm)
{
snd_pcm_plugin_t *plugin = pcm->private_data;
@@ -170,14 +179,7 @@ static int snd_pcm_plugin_reset(snd_pcm_t *pcm)
err = snd_pcm_reset(plugin->gen.slave);
if (err < 0)
return err;
- *pcm->hw.ptr = 0;
- *pcm->appl.ptr = 0;
- if (plugin->init) {
- err = plugin->init(pcm);
- if (err < 0)
- return err;
- }
- return 0;
+ return snd_pcm_plugin_call_init_cb(pcm, plugin);
}
static snd_pcm_sframes_t snd_pcm_plugin_rewindable(snd_pcm_t *pcm)
--
2.26.2

View File

@ -0,0 +1,64 @@
From 0de72e63d7bd180566c71f6fb01d7719525ee326 Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
Date: Tue, 19 Jan 2021 11:17:00 +0100
Subject: [PATCH 43/44] pcm: dmix/dshare - delay calculation fixes and cleanups
Unfortunately, we cannot use status->avail from slave, because this value
does not wrap to the buffer size and it may even overflow slave boundary
(endless run). We can use only hw_ptr from slave.
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
src/pcm/pcm_dmix.c | 5 ++---
src/pcm/pcm_dshare.c | 5 ++---
2 files changed, 4 insertions(+), 6 deletions(-)
diff --git a/src/pcm/pcm_dmix.c b/src/pcm/pcm_dmix.c
index 5b7472d90c58..be2675aff0f3 100644
--- a/src/pcm/pcm_dmix.c
+++ b/src/pcm/pcm_dmix.c
@@ -488,8 +488,7 @@ static int snd_pcm_dmix_status(snd_pcm_t *pcm, snd_pcm_status_t * status)
case SNDRV_PCM_STATE_DRAINING:
case SNDRV_PCM_STATE_RUNNING:
snd_pcm_dmix_sync_ptr0(pcm, status->hw_ptr);
- status->delay += snd_pcm_mmap_playback_delay(pcm)
- + status->avail - dmix->spcm->buffer_size;
+ status->delay = snd_pcm_mmap_playback_delay(pcm);
break;
default:
break;
@@ -518,7 +517,7 @@ static int snd_pcm_dmix_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp)
case SNDRV_PCM_STATE_PREPARED:
case SNDRV_PCM_STATE_SUSPENDED:
case STATE_RUN_PENDING:
- *delayp = snd_pcm_mmap_playback_hw_avail(pcm);
+ *delayp = snd_pcm_mmap_playback_delay(pcm);
return 0;
case SNDRV_PCM_STATE_XRUN:
return -EPIPE;
diff --git a/src/pcm/pcm_dshare.c b/src/pcm/pcm_dshare.c
index 8a6725729bc7..10243013714d 100644
--- a/src/pcm/pcm_dshare.c
+++ b/src/pcm/pcm_dshare.c
@@ -237,8 +237,7 @@ static int snd_pcm_dshare_status(snd_pcm_t *pcm, snd_pcm_status_t * status)
case SNDRV_PCM_STATE_DRAINING:
case SNDRV_PCM_STATE_RUNNING:
snd_pcm_dshare_sync_ptr0(pcm, status->hw_ptr);
- status->delay += snd_pcm_mmap_playback_delay(pcm)
- + status->avail - dshare->spcm->buffer_size;
+ status->delay += snd_pcm_mmap_playback_delay(pcm);
break;
default:
break;
@@ -290,7 +289,7 @@ static int snd_pcm_dshare_delay(snd_pcm_t *pcm, snd_pcm_sframes_t *delayp)
case SNDRV_PCM_STATE_PREPARED:
case SNDRV_PCM_STATE_SUSPENDED:
case STATE_RUN_PENDING:
- *delayp = snd_pcm_mmap_playback_hw_avail(pcm);
+ *delayp = snd_pcm_mmap_playback_delay(pcm);
return 0;
case SNDRV_PCM_STATE_XRUN:
return -EPIPE;
--
2.26.2

View File

@ -0,0 +1,40 @@
From ae7362c996e0b991c399cc26c6d0b3c8e295e83c Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
Date: Wed, 20 Jan 2021 16:58:33 +0100
Subject: [PATCH 44/44] topology: fix 'parse_tuple_set() - remove dead
condition code'
The whole SND_SOC_TPLG_TUPLE_TYPE_WORD condition part must be
commented out, otherwise the condition is always true.
Fixes: 51e1d486ce ("topology: parse_tuple_set() - remove dead condition code")
BugLink: https://github.com/alsa-project/alsa-lib/issues/114
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
src/topology/data.c | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/topology/data.c b/src/topology/data.c
index 5633cdc34dd9..0546d63e478c 100644
--- a/src/topology/data.c
+++ b/src/topology/data.c
@@ -859,11 +859,11 @@ static int parse_tuple_set(snd_config_t *cfg,
goto err;
}
- if ((type == SND_SOC_TPLG_TUPLE_TYPE_WORD
- /* && tuple_val > UINT_MAX */)
- || (type == SND_SOC_TPLG_TUPLE_TYPE_SHORT
- && tuple_val > USHRT_MAX)
- || (type == SND_SOC_TPLG_TUPLE_TYPE_BYTE
+ if (/* (type == SND_SOC_TPLG_TUPLE_TYPE_WORD
+ && tuple_val > UINT_MAX) || */
+ (type == SND_SOC_TPLG_TUPLE_TYPE_SHORT
+ && tuple_val > USHRT_MAX) ||
+ (type == SND_SOC_TPLG_TUPLE_TYPE_BYTE
&& tuple_val > UCHAR_MAX)) {
SNDERR("tuple %s: invalid value", id);
goto err;
--
2.26.2

View File

@ -1,3 +1,24 @@
-------------------------------------------------------------------
Thu Jan 21 09:36:12 CET 2021 - tiwai@suse.de
- Backport upstream fixes:
yet more PCM plugin fixes, topology fixes/cleanups, UAF fix in
UCM (bsc#1181194):
0004-topology-use-inclusive-language-for-bclk.patch
0005-topology-use-inclusive-language-for-fsync.patch
0006-topology-use-inclusive-language-in-documentation.patch
0034-ucm-fix-possible-memory-leak-in-parse_verb_file.patch
0035-topology-tplg_pprint_integer-fix-coverity-uninitaliz.patch
0036-topology-tplg_add_widget_object-do-not-use-invalid-e.patch
0037-topology-tplg_decode_pcm-add-missing-log-argument-co.patch
0038-topology-parse_tuple_set-remove-dead-condition-code.patch
0039-ucm-uc_mgr_substitute_tree-fix-use-after-free.patch
0040-topology-sort_config-cleanups-use-goto-for-the-error.patch
0041-conf-USB-add-Xonar-U7-MKII-to-USB-Audio.pcm.iec958_d.patch
0042-pcm_plugin-set-the-initial-hw_ptr-appl_ptr-from-the-.patch
0043-pcm-dmix-dshare-delay-calculation-fixes-and-cleanups.patch
0044-topology-fix-parse_tuple_set-remove-dead-condition-c.patch
-------------------------------------------------------------------
Tue Jan 5 15:13:13 CET 2021 - tiwai@suse.de

View File

@ -55,6 +55,9 @@ Source34: alsa-init.sh
Patch1: 0001-dlmisc-the-snd_plugin_dir_set-snd_plugin_dir-must-be.patch
Patch2: 0002-dlmisc-fix-snd_plugin_dir-locking-for-not-DL_ORIGIN_.patch
Patch3: 0003-pcm-snd_pcm_mmap_readi-fix-typo-in-comment.patch
Patch4: 0004-topology-use-inclusive-language-for-bclk.patch
Patch5: 0005-topology-use-inclusive-language-for-fsync.patch
Patch6: 0006-topology-use-inclusive-language-in-documentation.patch
Patch7: 0007-pcm-set-the-snd_pcm_ioplug_status-tstamp-field.patch
Patch9: 0009-pcm-Add-snd_pcm_audio_tstamp_type_t-constants.patch
Patch10: 0010-test-audio_time-Make-use-of-SND_PCM_AUDIO_TSTAMP_TYP.patch
@ -81,6 +84,17 @@ Patch30: 0030-pcm-rate-use-pcm_frame_diff-in-snd_pcm_rate_playback.patch
Patch31: 0031-pcm-plugin-fix-status-code-for-capture.patch
Patch32: 0032-pcm-rate-use-pcm_frame_diff-on-related-places.patch
Patch33: 0033-pcm-rate-fix-the-capture-delay-values.patch
Patch34: 0034-ucm-fix-possible-memory-leak-in-parse_verb_file.patch
Patch35: 0035-topology-tplg_pprint_integer-fix-coverity-uninitaliz.patch
Patch36: 0036-topology-tplg_add_widget_object-do-not-use-invalid-e.patch
Patch37: 0037-topology-tplg_decode_pcm-add-missing-log-argument-co.patch
Patch38: 0038-topology-parse_tuple_set-remove-dead-condition-code.patch
Patch39: 0039-ucm-uc_mgr_substitute_tree-fix-use-after-free.patch
Patch40: 0040-topology-sort_config-cleanups-use-goto-for-the-error.patch
Patch41: 0041-conf-USB-add-Xonar-U7-MKII-to-USB-Audio.pcm.iec958_d.patch
Patch42: 0042-pcm_plugin-set-the-initial-hw_ptr-appl_ptr-from-the-.patch
Patch43: 0043-pcm-dmix-dshare-delay-calculation-fixes-and-cleanups.patch
Patch44: 0044-topology-fix-parse_tuple_set-remove-dead-condition-c.patch
# rest suse fixes
Patch101: alsa-lib-ignore-non-accessible-ALSA_CONFIG_PATH.patch
BuildRequires: doxygen
@ -172,6 +186,9 @@ This package contains the library for ALSA topology support.
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch7 -p1
%patch9 -p1
%patch10 -p1
@ -198,6 +215,17 @@ This package contains the library for ALSA topology support.
%patch31 -p1
%patch32 -p1
%patch33 -p1
%patch34 -p1
%patch35 -p1
%patch36 -p1
%patch37 -p1
%patch38 -p1
%patch39 -p1
%patch40 -p1
%patch41 -p1
%patch42 -p1
%patch43 -p1
%patch44 -p1
%patch101 -p1
%build