import alsa-utils-1.2.5-2.el8

This commit is contained in:
CentOS Sources 2021-06-06 22:11:24 +00:00 committed by Andrew Lukoshko
parent cd9058ff58
commit cc8af08219
4 changed files with 441 additions and 417 deletions

View File

@ -1 +1 @@
84b2c5e8f0c345844e03e8e4ae73b761c3ae8829 SOURCES/alsa-utils-1.2.4.tar.bz2 51ed4a6a5d151f4c3b580464460c3788ee1e90fb SOURCES/alsa-utils-1.2.5.tar.bz2

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/alsa-utils-1.2.4.tar.bz2 SOURCES/alsa-utils-1.2.5.tar.bz2

View File

@ -1,441 +1,462 @@
From 737b64e1940b29c575be3942cd9f87aa390d93b2 Mon Sep 17 00:00:00 2001 From 78212445de4c8e07873cbc7dff2abcacd031f151 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E7=A9=8D=E4=B8=B9=E5=B0=BC=20Dan=20Jacobson?= From: Jaroslav Kysela <perex@perex.cz>
<jidanni@jidanni.org> Date: Tue, 1 Jun 2021 17:47:42 +0200
Date: Sun, 18 Oct 2020 18:33:54 +0800 Subject: [PATCH 1/9] alsactl: fix the nested iteration
Subject: [PATCH 02/14] alsamixer: Fix the mixer views description in man page
Fix grammar mess. There may be nested iterations for hw: card names.
Handle this card name in snd_card_iterator_sinit().
From: Dan Jacobson <jidanni@jidanni.org> 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> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
--- ---
alsamixer/alsamixer.1 | 2 +- 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/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 <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
From d6d566a9eebb63dd9d1351b07d385d39cdc33beb Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
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 <perex@perex.cz>
---
alsactl/alsactl.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-) 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/alsamixer/alsamixer.1 b/alsamixer/alsamixer.1 diff --git a/alsactl/alsactl.c b/alsactl/alsactl.c
index 8d34680..2d711cf 100644 index a011284..05738fb 100644
--- a/alsamixer/alsamixer.1 --- a/alsactl/alsactl.c
+++ b/alsamixer/alsamixer.1 +++ b/alsactl/alsactl.c
@@ -34,7 +34,7 @@ Toggle the using of colors. @@ -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;
}
.SH MIXER VIEWS static int dump_state(const char *file)
-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
-- --
2.29.2 2.30.2
From 986a1bd3d2eebd41a2925969826fca870b2cd330 Mon Sep 17 00:00:00 2001
From 511dd7a597735048f3883ef7883adf853ac2de4a Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz> From: Jaroslav Kysela <perex@perex.cz>
Date: Fri, 23 Oct 2020 12:05:56 +0200 Date: Fri, 4 Jun 2021 09:56:20 +0200
Subject: [PATCH 06/14] aplay: cosmetic code fix in xrun() Subject: [PATCH 4/9] alsactl: init() - return error value from
snd_card_iterator_sinit() call
Signed-off-by: Jaroslav Kysela <perex@perex.cz> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
--- ---
aplay/aplay.c | 3 ++- alsactl/init_parse.c | 2 ++
1 file changed, 2 insertions(+), 1 deletion(-) 1 file changed, 2 insertions(+)
diff --git a/aplay/aplay.c b/aplay/aplay.c diff --git a/alsactl/init_parse.c b/alsactl/init_parse.c
index a27220d..ae60988 100644 index 9d0f473..e439de7 100644
--- a/aplay/aplay.c --- a/alsactl/init_parse.c
+++ b/aplay/aplay.c +++ b/alsactl/init_parse.c
@@ -1676,7 +1676,8 @@ static void xrun(void) @@ -1751,6 +1751,8 @@ int init(const char *cfgdir, const char *filename, int flags, const char *cardna
prg_exit(EXIT_FAILURE);
}
return; /* ok, data should be accepted again */
- } if (snd_pcm_status_get_state(status) == SND_PCM_STATE_DRAINING) {
+ }
+ if (snd_pcm_status_get_state(status) == SND_PCM_STATE_DRAINING) {
if (verbose) {
fprintf(stderr, _("Status(DRAINING):\n"));
snd_pcm_status_dump(status, log);
--
2.29.2
sysfs_init();
From c1b92db5ef01311e5fc983f3134caa00826d0c2d Mon Sep 17 00:00:00 2001 err = snd_card_iterator_sinit(&iter, cardname);
From: Jaroslav Kysela <perex@perex.cz>
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.
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
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);
}
+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);
}
--
2.29.2
From 5812f37d877c12bc594b9ffddc493d305991963a Mon Sep 17 00:00:00 2001
From: Takashi Iwai <tiwai@suse.de>
Date: Wed, 9 Dec 2020 18:35:49 +0100
Subject: [PATCH 08/14] alsa-info: Add lsusb and stream outputs
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 <tiwai@suse.de>
---
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
+#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
@@ -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
--
2.29.2
From 878e1a7c0f03233530e7675ae015aced069c971d Mon Sep 17 00:00:00 2001
From: Takashi Iwai <tiwai@suse.de>
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.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
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
From c53f7cd03881092d5a61505d23ab8f920b7faf12 Mon Sep 17 00:00:00 2001
From: Takashi Iwai <tiwai@suse.de>
Date: Fri, 11 Dec 2020 23:46:23 +0100
Subject: [PATCH 11/14] alsactl: Fix race at creating a lock file
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.
BugLink: https://bugzilla.opensuse.org/show_bug.cgi?id=1179904
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
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;
}
}
}
--
2.29.2
From 12487b40b6e7230a003eb6e4333ee820d8578592 Mon Sep 17 00:00:00 2001
From: Takashi Iwai <tiwai@suse.de>
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.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
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@
[Service]
Type=oneshot
--
2.29.2
From 76bc37aeb77d51f995e223582d25335cd98b2eea Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
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.
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
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;
+ 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) + if (err < 0)
+ return; + goto out;
+ savail = snd_pcm_status_get_avail(status); while (snd_card_iterator_next(&iter)) {
+ sdelay = snd_pcm_status_get_delay(status); err = snd_card_clean_cfgdir(cfgdir, iter.card);
outofrange = (test_coef * (snd_pcm_sframes_t)buffer_frames) / 2; if (err < 0) {
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 (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;
}
}
+ 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 2.30.2
From 3980fe71c9795271639239ad8fa982a59de8ff1f Mon Sep 17 00:00:00 2001 From 2bc595e7bd9a9b8f8605104cfdb8f40a07c2655b Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz> From: Jaroslav Kysela <perex@perex.cz>
Date: Mon, 4 Jan 2021 12:13:03 +0100 Date: Fri, 4 Jun 2021 09:58:46 +0200
Subject: [PATCH 14/14] aplay: add avail > delay checks to --test-position Subject: [PATCH 5/9] alsactl: check for error values from snd_config_get...()
Signed-off-by: Jaroslav Kysela <perex@perex.cz> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
--- ---
aplay/aplay.c | 8 ++++++++ alsactl/state.c | 41 ++++++++++++++++++++++++++++-------------
1 file changed, 8 insertions(+) 1 file changed, 28 insertions(+), 13 deletions(-)
diff --git a/aplay/aplay.c b/aplay/aplay.c diff --git a/alsactl/state.c b/alsactl/state.c
index 5a6d5c3..b75be6c 100644 index 44fda3f..b3a3f4d 100644
--- a/aplay/aplay.c --- a/alsactl/state.c
+++ b/aplay/aplay.c +++ b/alsactl/state.c
@@ -1985,6 +1985,14 @@ static void do_test_position(void) @@ -655,13 +655,16 @@ static long config_iface(snd_config_t *n)
fprintf(stderr, _("Suspicious status buffer position (%li total): " const char *str;
"avail = %li, delay = %li, buffer = %li\n"), switch (snd_config_get_type(n)) {
++counter, (long)savail, (long)sdelay, (long)buffer_frames); case SND_CONFIG_TYPE_INTEGER:
+ } else if (avail > delay) { - snd_config_get_integer(n, &i);
+ fprintf(stderr, _("Suspicious buffer position avail > delay (%li total): " + if (snd_config_get_integer(n, &i) < 0)
+ "avail = %li, delay = %li\n"), + return -1;
+ ++counter, (long)avail, (long)delay); return i;
+ } else if (savail > sdelay) { case SND_CONFIG_TYPE_INTEGER64:
+ fprintf(stderr, _("Suspicious status buffer position avail > delay (%li total): " - snd_config_get_integer64(n, &li);
+ "avail = %li, delay = %li\n"), + if (snd_config_get_integer64(n, &li) < 0)
+ ++counter, (long)savail, (long)sdelay); + return -1;
} else if (verbose) { return li;
time(&now); case SND_CONFIG_TYPE_STRING:
if (tmr == (time_t) -1) { - 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)
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,
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 646d6ff094a82153db49af176cba3aacbde46cf6 Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
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: Jaroslav Kysela <perex@perex.cz>
---
alsactl/state.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
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
From cd2f779b8d6439479b9802e9fd2c8af86f8702fb Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
Date: Fri, 4 Jun 2021 10:08:18 +0200
Subject: [PATCH 7/9] alsactl: fix lock_fd unlock in load_configuration() -
error path
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
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.30.2
From 74ad91245f8257e242cf5b5b6b809f94321f197a Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
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: Jaroslav Kysela <perex@perex.cz>
---
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;
--
2.30.2
From c58f981e1530557835461b17b92eac6c475e5f68 Mon Sep 17 00:00:00 2001
From: Jaroslav Kysela <perex@perex.cz>
Date: Fri, 4 Jun 2021 10:19:22 +0200
Subject: [PATCH 9/9] topology: fix few coverity detected defects
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
---
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,
if (!args) {
SNDERR("insufficient arugments for widget %s\n", string);
- return -EINVAL;
+ ret = -EINVAL;
+ goto err;
}
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);
}
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.30.2

View File

@ -1,4 +1,4 @@
%define baseversion 1.2.4 %define baseversion 1.2.5
#define fixversion .2 #define fixversion .2
%global _hardened_build 1 %global _hardened_build 1
@ -192,6 +192,9 @@ fi
%systemd_postun_with_restart alsa-state.service %systemd_postun_with_restart alsa-state.service
%changelog %changelog
* Thu Jun 3 2021 Jaroslav Kysela <perex@perex.cz> - 1.2.5-2
- Updated to 1.2.5
* Mon Jun 8 2020 Jaroslav Kysela <perex@perex.cz> - 1.2.4-2 * Mon Jun 8 2020 Jaroslav Kysela <perex@perex.cz> - 1.2.4-2
- Updated to 1.2.4 - Updated to 1.2.4
- Apply fixes from recent upstream - Apply fixes from recent upstream