diff --git a/.alsa-utils.metadata b/.alsa-utils.metadata index 40c44b3..fb16a43 100644 --- a/.alsa-utils.metadata +++ b/.alsa-utils.metadata @@ -1 +1 @@ -84b2c5e8f0c345844e03e8e4ae73b761c3ae8829 SOURCES/alsa-utils-1.2.4.tar.bz2 +51ed4a6a5d151f4c3b580464460c3788ee1e90fb SOURCES/alsa-utils-1.2.5.tar.bz2 diff --git a/.gitignore b/.gitignore index 4136652..cba7815 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/alsa-utils-1.2.4.tar.bz2 +SOURCES/alsa-utils-1.2.5.tar.bz2 diff --git a/SOURCES/alsa-git.patch b/SOURCES/alsa-git.patch index b6ad492..3456836 100644 --- a/SOURCES/alsa-git.patch +++ b/SOURCES/alsa-git.patch @@ -1,441 +1,462 @@ -From 737b64e1940b29c575be3942cd9f87aa390d93b2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?=E7=A9=8D=E4=B8=B9=E5=B0=BC=20Dan=20Jacobson?= - -Date: Sun, 18 Oct 2020 18:33:54 +0800 -Subject: [PATCH 02/14] alsamixer: Fix the mixer views description in man page +From 78212445de4c8e07873cbc7dff2abcacd031f151 Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Tue, 1 Jun 2021 17:47:42 +0200 +Subject: [PATCH 1/9] alsactl: fix the nested iteration -Fix grammar mess. +There may be nested iterations for hw: card names. +Handle this card name in snd_card_iterator_sinit(). -From: Dan Jacobson +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 --- - alsamixer/alsamixer.1 | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/alsamixer/alsamixer.1 b/alsamixer/alsamixer.1 -index 8d34680..2d711cf 100644 ---- a/alsamixer/alsamixer.1 -+++ b/alsamixer/alsamixer.1 -@@ -34,7 +34,7 @@ Toggle the using of colors. + 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; - .SH MIXER VIEWS - --The top-left corner of \fBalsamixer\fP is the are to show some basic -+The top-left corner of \fBalsamixer\fP shows some basic - information: the card name, the mixer chip name, the current view - mode and the currently selected mixer item. - When the mixer item is switched off, \fI[Off]\fP is displayed in its + 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.29.2 +2.30.2 -From 986a1bd3d2eebd41a2925969826fca870b2cd330 Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Fri, 23 Oct 2020 12:05:56 +0200 -Subject: [PATCH 06/14] aplay: cosmetic code fix in xrun() +From 3d7a6facd9e1f962eef6c4ba3aa4cdc22477a6ac Mon Sep 17 00:00:00 2001 +From: Chao Song +Date: Mon, 31 May 2021 10:29:57 +0800 +Subject: [PATCH 2/9] 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 Signed-off-by: Jaroslav Kysela --- - aplay/aplay.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/aplay/aplay.c b/aplay/aplay.c -index a27220d..ae60988 100644 ---- a/aplay/aplay.c -+++ b/aplay/aplay.c -@@ -1676,7 +1676,8 @@ static void xrun(void) - prg_exit(EXIT_FAILURE); - } - return; /* ok, data should be accepted again */ -- } if (snd_pcm_status_get_state(status) == SND_PCM_STATE_DRAINING) { + 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; + } -+ if (snd_pcm_status_get_state(status) == SND_PCM_STATE_DRAINING) { - if (verbose) { - fprintf(stderr, _("Status(DRAINING):\n")); - snd_pcm_status_dump(status, log); ++ + token = calloc(1, strlen(token_ref) - strlen(type) + 1); + if (!token) + return -ENOMEM; -- -2.29.2 +2.30.2 -From c1b92db5ef01311e5fc983f3134caa00826d0c2d Mon Sep 17 00:00:00 2001 +From d6d566a9eebb63dd9d1351b07d385d39cdc33beb Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela -Date: Sun, 8 Nov 2020 19:11:12 +0100 -Subject: [PATCH 07/14] aplay: fix the CPU busy loop in the pause handler - -Use the standard poll mechanism to ensure that there's -something in the input to avoid busy loop on the file -descriptor with the non-block mode set. +Date: Fri, 4 Jun 2021 09:53:56 +0200 +Subject: [PATCH 3/9] alsactl: return error value in dump_config_tree() Signed-off-by: Jaroslav Kysela --- - aplay/aplay.c | 17 +++++++++++++++-- - 1 file changed, 15 insertions(+), 2 deletions(-) - -diff --git a/aplay/aplay.c b/aplay/aplay.c -index ae60988..d385da2 100644 ---- a/aplay/aplay.c -+++ b/aplay/aplay.c -@@ -1553,6 +1553,19 @@ static void done_stdin(void) - tcsetattr(fileno(stdin), TCSANOW, &term); + alsactl/alsactl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/alsactl/alsactl.c b/alsactl/alsactl.c +index a011284..05738fb 100644 +--- a/alsactl/alsactl.c ++++ b/alsactl/alsactl.c +@@ -170,7 +170,7 @@ static int dump_config_tree(snd_config_t *top) + return err; + err = snd_config_save(top, out); + snd_output_close(out); +- return 0; ++ return err; } -+static char wait_for_input(void) -+{ -+ struct pollfd pfd; -+ unsigned char b; -+ -+ do { -+ pfd.fd = fileno(stdin); -+ pfd.events = POLLIN; -+ poll(&pfd, 1, -1); -+ } while (read(fileno(stdin), &b, 1) != 1); -+ return b; -+} -+ - static void do_pause(void) - { - int err; -@@ -1571,7 +1584,7 @@ static void do_pause(void) - return; - } - while (1) { -- while (read(fileno(stdin), &b, 1) != 1); -+ b = wait_for_input(); - if (b == ' ' || b == '\r') { - while (read(fileno(stdin), &b, 1) == 1); - if (snd_pcm_state(handle) == SND_PCM_STATE_SUSPENDED) -@@ -1596,7 +1609,7 @@ static void check_stdin(void) - while (read(fileno(stdin), &b, 1) == 1); - fprintf(stderr, _("\r=== PAUSE === ")); - fflush(stderr); -- do_pause(); -+ do_pause(); - fprintf(stderr, " \r"); - fflush(stderr); - } + static int dump_state(const char *file) -- -2.29.2 +2.30.2 -From 5812f37d877c12bc594b9ffddc493d305991963a Mon Sep 17 00:00:00 2001 -From: Takashi Iwai -Date: Wed, 9 Dec 2020 18:35:49 +0100 -Subject: [PATCH 08/14] alsa-info: Add lsusb and stream outputs +From 511dd7a597735048f3883ef7883adf853ac2de4a Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Fri, 4 Jun 2021 09:56:20 +0200 +Subject: [PATCH 4/9] alsactl: init() - return error value from + snd_card_iterator_sinit() call + +Signed-off-by: Jaroslav Kysela +--- + alsactl/init_parse.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/alsactl/init_parse.c b/alsactl/init_parse.c +index 9d0f473..e439de7 100644 +--- a/alsactl/init_parse.c ++++ b/alsactl/init_parse.c +@@ -1751,6 +1751,8 @@ int init(const char *cfgdir, const char *filename, int flags, const char *cardna + + sysfs_init(); + err = snd_card_iterator_sinit(&iter, cardname); ++ if (err < 0) ++ goto out; + while (snd_card_iterator_next(&iter)) { + err = snd_card_clean_cfgdir(cfgdir, iter.card); + if (err < 0) { +-- +2.30.2 -We need more detailed information for USB-audio devices, at least the -lsusb -v output and the contents of stream* proc files. -Let's add them to alsa-info.sh output. -Signed-off-by: Takashi Iwai +From 2bc595e7bd9a9b8f8605104cfdb8f40a07c2655b Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Fri, 4 Jun 2021 09:58:46 +0200 +Subject: [PATCH 5/9] alsactl: check for error values from snd_config_get...() + +Signed-off-by: Jaroslav Kysela --- - alsa-info/alsa-info.sh | 33 +++++++++++++++++++++++++++++++++ - 1 file changed, 33 insertions(+) - -diff --git a/alsa-info/alsa-info.sh b/alsa-info/alsa-info.sh -index f179bfa..3871b97 100755 ---- a/alsa-info/alsa-info.sh -+++ b/alsa-info/alsa-info.sh -@@ -476,6 +476,18 @@ cat /proc/asound/card*/codec\#* > $TEMPDIR/alsa-hda-intel.tmp 2> /dev/null - cat /proc/asound/card*/codec97\#0/ac97\#0-0 > $TEMPDIR/alsa-ac97.tmp 2> /dev/null - cat /proc/asound/card*/codec97\#0/ac97\#0-0+regs > $TEMPDIR/alsa-ac97-regs.tmp 2> /dev/null + alsactl/state.c | 41 ++++++++++++++++++++++++++++------------- + 1 file changed, 28 insertions(+), 13 deletions(-) + +diff --git a/alsactl/state.c b/alsactl/state.c +index 44fda3f..b3a3f4d 100644 +--- a/alsactl/state.c ++++ b/alsactl/state.c +@@ -655,13 +655,16 @@ static long config_iface(snd_config_t *n) + const char *str; + switch (snd_config_get_type(n)) { + case SND_CONFIG_TYPE_INTEGER: +- snd_config_get_integer(n, &i); ++ if (snd_config_get_integer(n, &i) < 0) ++ return -1; + return i; + case SND_CONFIG_TYPE_INTEGER64: +- snd_config_get_integer64(n, &li); ++ if (snd_config_get_integer64(n, &li) < 0) ++ return -1; + return li; + case SND_CONFIG_TYPE_STRING: +- snd_config_get_string(n, &str); ++ if (snd_config_get_string(n, &str) < 0) ++ return -1; + break; + default: + return -1; +@@ -681,17 +684,20 @@ static int config_bool(snd_config_t *n, int doit) -+#Check for USB descriptors -+if [ -x /usr/bin/lsusb ]; then -+ for f in /proc/asound/card[0-9]*/usbbus; do -+ test -f "$f" || continue -+ id=$(sed 's@/@:@' $f) -+ lsusb -v -s $id >> $TEMPDIR/lsusb.tmp 2> /dev/null -+ done -+fi -+ -+#Check for USB stream setup -+cat /proc/asound/card*/stream[0-9]* > $TEMPDIR/alsa-usbstream.tmp 2> /dev/null -+ - #Check for USB mixer setup - cat /proc/asound/card*/usbmixer > $TEMPDIR/alsa-usbmixer.tmp 2> /dev/null + switch (snd_config_get_type(n)) { + case SND_CONFIG_TYPE_INTEGER: +- snd_config_get_integer(n, &val); ++ if (snd_config_get_integer(n, &val) < 0) ++ return -1; + if (val < 0 || val > 1) + return -1; + return val; + case SND_CONFIG_TYPE_INTEGER64: +- snd_config_get_integer64(n, &lval); ++ if (snd_config_get_integer64(n, &lval) < 0) ++ return -1; + if (lval < 0 || lval > 1) + return -1; + return (int) lval; + case SND_CONFIG_TYPE_STRING: +- snd_config_get_string(n, &str); ++ if (snd_config_get_string(n, &str) < 0) ++ return -1; + break; + case SND_CONFIG_TYPE_COMPOUND: + if (!force_restore || !doit) +@@ -718,13 +724,16 @@ static int config_enumerated(snd_config_t *n, snd_ctl_t *handle, -@@ -649,6 +661,27 @@ if [ -s "$TEMPDIR/alsa-ac97.tmp" ]; then - echo "" >> $FILE - fi - -+if [ -s "$TEMPDIR/lsusb.tmp" ]; then -+ echo "!!USB Descriptors" >> $FILE -+ echo "!!---------------" >> $FILE -+ echo "--startcollapse--" >> $FILE -+ cat $TEMPDIR/lsusb.tmp >> $FILE -+ echo "--endcollapse--" >> $FILE -+ echo "" >> $FILE -+ echo "" >> $FILE -+fi -+ -+if [ -s "$TEMPDIR/lsusb.tmp" ]; then -+ echo "!!USB Stream information" >> $FILE -+ echo "!!----------------------" >> $FILE -+ echo "--startcollapse--" >> $FILE -+ echo "" >> $FILE -+ cat $TEMPDIR/alsa-usbstream.tmp >> $FILE -+ echo "--endcollapse--" >> $FILE -+ echo "" >> $FILE -+ echo "" >> $FILE -+fi -+ - if [ -s "$TEMPDIR/alsa-usbmixer.tmp" ]; then - echo "!!USB Mixer information" >> $FILE - echo "!!---------------------" >> $FILE + switch (snd_config_get_type(n)) { + case SND_CONFIG_TYPE_INTEGER: +- snd_config_get_integer(n, &val); ++ if (snd_config_get_integer(n, &val) < 0) ++ return -1; + return val; + case SND_CONFIG_TYPE_INTEGER64: +- snd_config_get_integer64(n, &lval); ++ if (snd_config_get_integer64(n, &lval) < 0) ++ return -1; + return (int) lval; + case SND_CONFIG_TYPE_STRING: +- snd_config_get_string(n, &str); ++ if (snd_config_get_string(n, &str) < 0) ++ return -1; + break; + case SND_CONFIG_TYPE_COMPOUND: + if (!force_restore || !doit) +@@ -1247,6 +1256,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control, + } + if (strcmp(fld, "iface") == 0) { + iface = (snd_ctl_elem_iface_t)config_iface(n); ++ if (iface < 0) ++ return -EINVAL; + continue; + } + if (strcmp(fld, "device") == 0) { +@@ -1254,7 +1265,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control, + cerror(doit, "control.%d.%s is invalid", numid, fld); + return -EINVAL; + } +- snd_config_get_integer(n, &device); ++ if (snd_config_get_integer(n, &device) < 0) ++ return -EINVAL; + continue; + } + if (strcmp(fld, "subdevice") == 0) { +@@ -1262,7 +1274,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control, + cerror(doit, "control.%d.%s is invalid", numid, fld); + return -EINVAL; + } +- snd_config_get_integer(n, &subdevice); ++ if (snd_config_get_integer(n, &subdevice) < 0) ++ return -EINVAL; + continue; + } + if (strcmp(fld, "name") == 0) { +@@ -1270,7 +1283,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control, + cerror(doit, "control.%d.%s is invalid", numid, fld); + return -EINVAL; + } +- snd_config_get_string(n, &name); ++ if (snd_config_get_string(n, &name) < 0) ++ return -EINVAL; + continue; + } + if (strcmp(fld, "index") == 0) { +@@ -1278,7 +1292,8 @@ static int set_control(snd_ctl_t *handle, snd_config_t *control, + cerror(doit, "control.%d.%s is invalid", numid, fld); + return -EINVAL; + } +- snd_config_get_integer(n, &index); ++ if (snd_config_get_integer(n, &index) < 0) ++ return -EINVAL; + continue; + } + if (strcmp(fld, "value") == 0) { -- -2.29.2 +2.30.2 -From 878e1a7c0f03233530e7675ae015aced069c971d Mon Sep 17 00:00:00 2001 -From: Takashi Iwai -Date: Fri, 11 Dec 2020 23:41:59 +0100 -Subject: [PATCH 10/14] alsactl: Fix double decrease of lock timeout - -The state_lock() has a loop to wait for the lock file creation, and -the timeout value gets decremented twice mistakenly, which leads to a -half timeout (5 seconds) than expected 10 seconds. Fix it. +From 646d6ff094a82153db49af176cba3aacbde46cf6 Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Fri, 4 Jun 2021 10:04:50 +0200 +Subject: [PATCH 6/9] =?UTF-8?q?alsactl:=20state=20-=20fix=20=E2=80=98item?= + =?UTF-8?q?=E2=80=99=20may=20be=20used=20uninitialized=20gcc=20warning?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit -Signed-off-by: Takashi Iwai +Signed-off-by: Jaroslav Kysela --- - alsactl/lock.c | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/alsactl/lock.c b/alsactl/lock.c -index 4a48539..05f6e4d 100644 ---- a/alsactl/lock.c -+++ b/alsactl/lock.c -@@ -63,7 +63,6 @@ static int state_lock_(const char *file, int lock, int timeout, int _fd) - if (fd < 0) { - if (errno == EBUSY || errno == EAGAIN) { - sleep(1); -- timeout--; - } else { - err = -errno; - goto out; --- -2.29.2 - + alsactl/state.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) -From c53f7cd03881092d5a61505d23ab8f920b7faf12 Mon Sep 17 00:00:00 2001 -From: Takashi Iwai -Date: Fri, 11 Dec 2020 23:46:23 +0100 -Subject: [PATCH 11/14] alsactl: Fix race at creating a lock file +diff --git a/alsactl/state.c b/alsactl/state.c +index b3a3f4d..9c75688 100644 +--- a/alsactl/state.c ++++ b/alsactl/state.c +@@ -229,7 +229,7 @@ static int get_control(snd_ctl_t *handle, snd_ctl_elem_id_t *id, snd_config_t *t + { + snd_ctl_elem_value_t *ctl; + snd_ctl_elem_info_t *info; +- snd_config_t *control, *comment, *item, *value; ++ snd_config_t *control, *comment, *item = NULL, *value; + const char *s; + char buf[256]; + unsigned int idx; +-- +2.30.2 -A race at creating a lock file in state_lock() was discovered -recently: namely, between the first open(O_RDWR) and the second -open(O_RDWR|O_CREAT|O_EXCL) calls, another alsactl invocation may -already create a lock file, then the second open() will return EEXIST, -which isn't handled properly and treated as a fatal error. -In this patch, we check EEXIST case and try again open() with O_RDWR. -This must succeed usually, and if it fails, handle finally as the -fatal error. +From cd2f779b8d6439479b9802e9fd2c8af86f8702fb Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Fri, 4 Jun 2021 10:08:18 +0200 +Subject: [PATCH 7/9] alsactl: fix lock_fd unlock in load_configuration() - + error path -BugLink: https://bugzilla.opensuse.org/show_bug.cgi?id=1179904 -Signed-off-by: Takashi Iwai +Signed-off-by: Jaroslav Kysela --- - alsactl/lock.c | 11 ++++++++--- - 1 file changed, 8 insertions(+), 3 deletions(-) - -diff --git a/alsactl/lock.c b/alsactl/lock.c -index 05f6e4d..5b47462 100644 ---- a/alsactl/lock.c -+++ b/alsactl/lock.c -@@ -63,10 +63,15 @@ static int state_lock_(const char *file, int lock, int timeout, int _fd) - if (fd < 0) { - if (errno == EBUSY || errno == EAGAIN) { - sleep(1); -- } else { -- err = -errno; -- goto out; -+ continue; - } -+ if (errno == EEXIST) { -+ fd = open(nfile, O_RDWR); -+ if (fd >= 0) -+ break; -+ } -+ err = -errno; -+ goto out; - } - } + alsactl/utils.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/alsactl/utils.c b/alsactl/utils.c +index 881b505..fd4a108 100644 +--- a/alsactl/utils.c ++++ b/alsactl/utils.c +@@ -220,15 +220,17 @@ int load_configuration(const char *file, snd_config_t **top, int *open_failed) + } + err = snd_config_load(config, in); + snd_input_close(in); +- if (lock_fd >= 0) +- state_unlock(lock_fd, file); + if (err < 0) { + error("snd_config_load error: %s", snd_strerror(err)); + out: ++ if (lock_fd >= 0) ++ state_unlock(lock_fd, file); + snd_config_delete(config); + snd_config_update_free_global(); + return err; + } else { ++ if (lock_fd >= 0) ++ state_unlock(lock_fd, file); + *top = config; + return 0; } -- -2.29.2 - +2.30.2 -From 12487b40b6e7230a003eb6e4333ee820d8578592 Mon Sep 17 00:00:00 2001 -From: Takashi Iwai -Date: Fri, 11 Dec 2020 23:55:34 +0100 -Subject: [PATCH 12/14] alsactl: Remove asound.state file check from - alsa-restore.service again -We added the check of asound.state file presence some time ago to -assure that alsactl gets called only if the state file is already -present. Since then, the situation has changed significantly: -e.g. now alsactl does initialize if the state file isn't present, and -the same alsa-restore.service is used to save the state. This means -that we should start this service no matter the state file exists at -the boot time or not. So, revert the old change again. +From 74ad91245f8257e242cf5b5b6b809f94321f197a Mon Sep 17 00:00:00 2001 +From: Jaroslav Kysela +Date: Fri, 4 Jun 2021 10:12:06 +0200 +Subject: [PATCH 8/9] axfer: fix wrong calloc() item size in + allocate_containers() -Signed-off-by: Takashi Iwai +Signed-off-by: Jaroslav Kysela --- - alsactl/alsa-restore.service.in | 1 - - 1 file changed, 1 deletion(-) - -diff --git a/alsactl/alsa-restore.service.in b/alsactl/alsa-restore.service.in -index a84c2e8..80fd5fd 100644 ---- a/alsactl/alsa-restore.service.in -+++ b/alsactl/alsa-restore.service.in -@@ -7,7 +7,6 @@ - Description=Save/Restore Sound Card State - ConditionPathExists=!@daemonswitch@ - ConditionPathExistsGlob=/dev/snd/control* --ConditionPathExists=@asoundrcfile@ + axfer/subcmd-transfer.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/axfer/subcmd-transfer.c b/axfer/subcmd-transfer.c +index 27d2cc5..839215a 100644 +--- a/axfer/subcmd-transfer.c ++++ b/axfer/subcmd-transfer.c +@@ -155,7 +155,7 @@ static int allocate_containers(struct context *ctx, unsigned int count) + return -ENOMEM; + ctx->cntr_count = count; + +- ctx->cntr_fds = calloc(count, sizeof(*ctx->cntrs)); ++ ctx->cntr_fds = calloc(count, sizeof(*ctx->cntr_fds)); + if (ctx->cntr_fds == NULL) + return -ENOMEM; - [Service] - Type=oneshot -- -2.29.2 +2.30.2 -From 76bc37aeb77d51f995e223582d25335cd98b2eea Mon Sep 17 00:00:00 2001 +From c58f981e1530557835461b17b92eac6c475e5f68 Mon Sep 17 00:00:00 2001 From: Jaroslav Kysela -Date: Sun, 3 Jan 2021 17:19:03 +0100 -Subject: [PATCH 13/14] aplay: add test code for snd_pcm_status() to - --test-position - -We need to test also snd_pcm_status() values. +Date: Fri, 4 Jun 2021 10:19:22 +0200 +Subject: [PATCH 9/9] topology: fix few coverity detected defects Signed-off-by: Jaroslav Kysela --- - aplay/aplay.c | 48 ++++++++++++++++++++++++++++++++++++++---------- - 1 file changed, 38 insertions(+), 10 deletions(-) - -diff --git a/aplay/aplay.c b/aplay/aplay.c -index d385da2..5a6d5c3 100644 ---- a/aplay/aplay.c -+++ b/aplay/aplay.c -@@ -1953,22 +1953,38 @@ static void do_test_position(void) - static snd_pcm_sframes_t minavail, mindelay; - static snd_pcm_sframes_t badavail = 0, baddelay = 0; - snd_pcm_sframes_t outofrange; -- snd_pcm_sframes_t avail, delay; -+ snd_pcm_sframes_t avail, delay, savail, sdelay; -+ snd_pcm_status_t *status; - int err; + topology/pre-process-dapm.c | 3 ++- + topology/pre-process-object.c | 15 ++++++++++----- + topology/pre-processor.c | 2 +- + 3 files changed, 13 insertions(+), 7 deletions(-) + +diff --git a/topology/pre-process-dapm.c b/topology/pre-process-dapm.c +index dbaf2f1..dc510e1 100644 +--- a/topology/pre-process-dapm.c ++++ b/topology/pre-process-dapm.c +@@ -203,7 +203,8 @@ static int tplg_pp_get_widget_name(struct tplg_pre_processor *tplg_pp, -+ snd_pcm_status_alloca(&status); - err = snd_pcm_avail_delay(handle, &avail, &delay); - if (err < 0) - return; -+ err = snd_pcm_status(handle, status); -+ if (err < 0) -+ return; -+ savail = snd_pcm_status_get_avail(status); -+ sdelay = snd_pcm_status_get_delay(status); - outofrange = (test_coef * (snd_pcm_sframes_t)buffer_frames) / 2; - if (avail > outofrange || avail < -outofrange || - delay > outofrange || delay < -outofrange) { -- badavail = avail; baddelay = delay; -- availsum = delaysum = samples = 0; -- maxavail = maxdelay = 0; -- minavail = mindelay = buffer_frames * 16; -- fprintf(stderr, _("Suspicious buffer position (%li total): " -- "avail = %li, delay = %li, buffer = %li\n"), -- ++counter, (long)avail, (long)delay, (long)buffer_frames); -+ badavail = avail; baddelay = delay; -+ availsum = delaysum = samples = 0; -+ maxavail = maxdelay = 0; -+ minavail = mindelay = buffer_frames * 16; -+ fprintf(stderr, _("Suspicious buffer position (%li total): " -+ "avail = %li, delay = %li, buffer = %li\n"), -+ ++counter, (long)avail, (long)delay, (long)buffer_frames); -+ } else if (savail > outofrange || savail < -outofrange || -+ sdelay > outofrange || sdelay < -outofrange) { -+ badavail = savail; baddelay = sdelay; -+ availsum = delaysum = samples = 0; -+ maxavail = maxdelay = 0; -+ minavail = mindelay = buffer_frames * 16; -+ fprintf(stderr, _("Suspicious status buffer position (%li total): " -+ "avail = %li, delay = %li, buffer = %li\n"), -+ ++counter, (long)savail, (long)sdelay, (long)buffer_frames); - } else if (verbose) { - time(&now); - if (tmr == (time_t) -1) { -@@ -1979,19 +1995,27 @@ static void do_test_position(void) + if (!args) { + SNDERR("insufficient arugments for widget %s\n", string); +- return -EINVAL; ++ ret = -EINVAL; ++ goto err; } - if (avail > maxavail) - maxavail = avail; -+ if (savail > maxavail) -+ maxavail = savail; - if (delay > maxdelay) - maxdelay = delay; -+ if (sdelay > maxdelay) -+ maxdelay = sdelay; - if (avail < minavail) - minavail = avail; -+ if (savail < minavail) -+ minavail = savail; - if (delay < mindelay) - mindelay = delay; -+ if (sdelay < mindelay) -+ mindelay = sdelay; - availsum += avail; - delaysum += delay; - samples++; -- if (avail != 0 && now != tmr) { -+ if ((maxavail != 0 || maxdelay != 0) && now != tmr) { - fprintf(stderr, "BUFPOS: avg%li/%li " - "min%li/%li max%li/%li (%li) (%li:%li/%li)\n", -- (long)(availsum / samples), -+ (long)(availsum / samples), - (long)(delaysum / samples), - (long)minavail, (long)mindelay, - (long)maxavail, (long)maxdelay, -@@ -2000,6 +2024,10 @@ static void do_test_position(void) - tmr = now; + + remaining = strchr(args + 1, '.'); +diff --git a/topology/pre-process-object.c b/topology/pre-process-object.c +index ac8caec..7565091 100644 +--- a/topology/pre-process-object.c ++++ b/topology/pre-process-object.c +@@ -463,7 +463,8 @@ static snd_config_t *tplg_object_lookup_in_config(struct tplg_pre_processor *tpl + if (!config_id) + return NULL; + +- snd_config_search(class, config_id, &obj_cfg); ++ if (snd_config_search(class, config_id, &obj_cfg) < 0) ++ return NULL; + free(config_id); + return obj_cfg; + } +@@ -704,11 +705,12 @@ static int tplg_add_object_data(struct tplg_pre_processor *tplg_pp, snd_config_t + + ret = tplg_pp_add_object_tuple_section(tplg_pp, class_cfg, n, data_cfg_name, + token); +- free(data_cfg_name); + if (ret < 0) { + SNDERR("Failed to add data section %s\n", data_cfg_name); ++ free(data_cfg_name); + return ret; } ++ free(data_cfg_name); } -+ if (verbose == 1) { -+ fprintf(stderr, _("Status(R/W) (standalone avail=%li delay=%li):\n"), (long)avail, (long)delay); -+ snd_pcm_status_dump(status, log); -+ } - } - /* --- -2.29.2 - - -From 3980fe71c9795271639239ad8fa982a59de8ff1f Mon Sep 17 00:00:00 2001 -From: Jaroslav Kysela -Date: Mon, 4 Jan 2021 12:13:03 +0100 -Subject: [PATCH 14/14] aplay: add avail > delay checks to --test-position - -Signed-off-by: Jaroslav Kysela ---- - aplay/aplay.c | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/aplay/aplay.c b/aplay/aplay.c -index 5a6d5c3..b75be6c 100644 ---- a/aplay/aplay.c -+++ b/aplay/aplay.c -@@ -1985,6 +1985,14 @@ static void do_test_position(void) - fprintf(stderr, _("Suspicious status buffer position (%li total): " - "avail = %li, delay = %li, buffer = %li\n"), - ++counter, (long)savail, (long)sdelay, (long)buffer_frames); -+ } else if (avail > delay) { -+ fprintf(stderr, _("Suspicious buffer position avail > delay (%li total): " -+ "avail = %li, delay = %li\n"), -+ ++counter, (long)avail, (long)delay); -+ } else if (savail > sdelay) { -+ fprintf(stderr, _("Suspicious status buffer position avail > delay (%li total): " -+ "avail = %li, delay = %li\n"), -+ ++counter, (long)savail, (long)sdelay); - } else if (verbose) { - time(&now); - if (tmr == (time_t) -1) { + return 0; +@@ -1215,8 +1217,10 @@ static int tplg_construct_object_name(struct tplg_pre_processor *tplg_pp, snd_co + return 0; + + /* set class name as the name prefix for the object */ +- snd_config_get_id(obj, &obj_id); +- snd_config_get_id(class_cfg, &class_id); ++ if (snd_config_get_id(obj, &obj_id) < 0) ++ return -EINVAL; ++ if (snd_config_get_id(class_cfg, &class_id) < 0) ++ return -EINVAL; + new_name = strdup(class_id); + if (!new_name) + return -ENOMEM; +@@ -1280,7 +1284,8 @@ static int tplg_construct_object_name(struct tplg_pre_processor *tplg_pp, snd_co + default: + SNDERR("Argument '%s' in object '%s.%s' is not an integer or a string\n", + s, class_id, obj_id); +- return -EINVAL; ++ ret = -EINVAL; ++ goto err; + } + + /* alloc and concat arg value to the name */ +diff --git a/topology/pre-processor.c b/topology/pre-processor.c +index 0458c3c..442dcc4 100644 +--- a/topology/pre-processor.c ++++ b/topology/pre-processor.c +@@ -183,7 +183,7 @@ int init_pre_precessor(struct tplg_pre_processor **tplg_pp, snd_output_type_t ty + + _tplg_pp = calloc(1, sizeof(struct tplg_pre_processor)); + if (!_tplg_pp) +- ret = -ENOMEM; ++ return -ENOMEM; + + *tplg_pp = _tplg_pp; + -- -2.29.2 +2.30.2 diff --git a/SPECS/alsa-utils.spec b/SPECS/alsa-utils.spec index 7ce6b02..6e7ae1f 100644 --- a/SPECS/alsa-utils.spec +++ b/SPECS/alsa-utils.spec @@ -1,4 +1,4 @@ -%define baseversion 1.2.4 +%define baseversion 1.2.5 #define fixversion .2 %global _hardened_build 1 @@ -192,6 +192,9 @@ fi %systemd_postun_with_restart alsa-state.service %changelog +* Thu Jun 3 2021 Jaroslav Kysela - 1.2.5-2 +- Updated to 1.2.5 + * Mon Jun 8 2020 Jaroslav Kysela - 1.2.4-2 - Updated to 1.2.4 - Apply fixes from recent upstream