Accepting request 980994 from multimedia:libs
- Backport upstream fixes for 32bit inode and ELD parsing: 0001-conf-Use-ino64_t-to-save-and-compare-inode-numbers.patch 0002-control-eld-fix-the-decoding-for-older-hw.patch OBS-URL: https://build.opensuse.org/request/show/980994 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/alsa?expand=0&rev=215
This commit is contained in:
commit
0acf31b5a2
@ -0,0 +1,53 @@
|
||||
From 87ff5318e327eb2343f10bd73dce5a32f12db622 Mon Sep 17 00:00:00 2001
|
||||
From: Simon McVittie <smcv@collabora.com>
|
||||
Date: Wed, 25 May 2022 12:33:42 +0100
|
||||
Subject: [PATCH 1/2] conf: Use ino64_t to save and compare inode numbers
|
||||
|
||||
On 32-bit platforms when not using the large-file-support ABI,
|
||||
struct stat64 contains ino64_t which is 64-bit, while ino_t is only
|
||||
32-bit.
|
||||
|
||||
snd_config_update_r() checks whether a file has been replaced by saving
|
||||
the ino member of a struct stat64 and comparing it with a previously-saved
|
||||
inode number. On 32-bit platforms, assigning the 64-bit member of struct
|
||||
stat64 to a 32-bit member of struct finfo will truncate it modulo 1<<32,
|
||||
which could conceivably result in libasound not reloading configuration
|
||||
when it should (although the inode number space is large enough to make
|
||||
this failure mode highly unlikely).
|
||||
|
||||
Fixes: https://github.com/alsa-project/alsa-lib/pull/231
|
||||
Signed-off-by: Simon McVittie <smcv@collabora.com>
|
||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
||||
---
|
||||
include/local.h | 1 +
|
||||
src/conf.c | 2 +-
|
||||
2 files changed, 2 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/include/local.h b/include/local.h
|
||||
index 51fa4063afa7..268a9ff1200e 100644
|
||||
--- a/include/local.h
|
||||
+++ b/include/local.h
|
||||
@@ -84,6 +84,7 @@
|
||||
#define scandir64 scandir
|
||||
#define versionsort64 versionsort
|
||||
#define alphasort64 alphasort
|
||||
+#define ino64_t ino_t
|
||||
#endif
|
||||
|
||||
#define _snd_config_iterator list_head
|
||||
diff --git a/src/conf.c b/src/conf.c
|
||||
index 3d2b4a5bc184..a996e5f9f9be 100644
|
||||
--- a/src/conf.c
|
||||
+++ b/src/conf.c
|
||||
@@ -3921,7 +3921,7 @@ snd_config_t *snd_config = NULL;
|
||||
struct finfo {
|
||||
char *name;
|
||||
dev_t dev;
|
||||
- ino_t ino;
|
||||
+ ino64_t ino;
|
||||
time_t mtime;
|
||||
};
|
||||
|
||||
--
|
||||
2.35.3
|
||||
|
58
0002-control-eld-fix-the-decoding-for-older-hw.patch
Normal file
58
0002-control-eld-fix-the-decoding-for-older-hw.patch
Normal file
@ -0,0 +1,58 @@
|
||||
From 89ee61914756a6f8bcafbad7fb1eca674b0a012f Mon Sep 17 00:00:00 2001
|
||||
From: Jaroslav Kysela <perex@perex.cz>
|
||||
Date: Mon, 6 Jun 2022 12:11:24 +0200
|
||||
Subject: [PATCH 2/2] control: eld - fix the decoding for older hw
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
It seems that the monitor name is not always present in the
|
||||
ELD structure. Add asterisk suffix to notify user about
|
||||
the monitor present for this case.
|
||||
|
||||
Thanks goes to Bernhard Rosenkränzer <bero@lindev.ch> for the report.
|
||||
|
||||
Fixes: https://github.com/alsa-project/alsa-lib/pull/233
|
||||
Fixes: https://github.com/alsa-project/alsa-lib/pull/234
|
||||
Signed-off-by: Jaroslav Kysela <perex@perex.cz>
|
||||
---
|
||||
src/control/eld.c | 16 +++++++++++++---
|
||||
1 file changed, 13 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/control/eld.c b/src/control/eld.c
|
||||
index 1e161eb1d271..9be9605fd091 100644
|
||||
--- a/src/control/eld.c
|
||||
+++ b/src/control/eld.c
|
||||
@@ -74,8 +74,13 @@ int __snd_pcm_info_eld_fixup(snd_pcm_info_t * info)
|
||||
if (cinfo.count < 20 || cinfo.count > 256)
|
||||
return -EIO;
|
||||
l = eld[4] & 0x1f;
|
||||
- if (l == 0 || l > 16 || 20 + l > cinfo.count)
|
||||
- return -EIO;
|
||||
+ if (l == 0)
|
||||
+ /* no monitor name detected */
|
||||
+ goto __present;
|
||||
+ if (l > 16 || 20 + l > cinfo.count) {
|
||||
+ SNDERR("ELD decode failed, using old HDMI output names\n");
|
||||
+ return 0;
|
||||
+ }
|
||||
s = alloca(l + 1);
|
||||
s[l] = '\0';
|
||||
/* sanitize */
|
||||
@@ -90,7 +95,12 @@ int __snd_pcm_info_eld_fixup(snd_pcm_info_t * info)
|
||||
s[l] = c;
|
||||
}
|
||||
}
|
||||
- if (valid > 3)
|
||||
+ if (valid > 3) {
|
||||
snd_strlcpy((char *)info->name, s, sizeof(info->name));
|
||||
+ } else {
|
||||
+__present:
|
||||
+ strncat((char *)info->name, " *", sizeof(info->name) - 1);
|
||||
+ ((char *)info->name)[sizeof(info->name)-1] = '\0';
|
||||
+ }
|
||||
return 0;
|
||||
}
|
||||
--
|
||||
2.35.3
|
||||
|
@ -1,3 +1,10 @@
|
||||
-------------------------------------------------------------------
|
||||
Mon Jun 6 10:56:29 UTC 2022 - Takashi Iwai <tiwai@suse.com>
|
||||
|
||||
- Backport upstream fixes for 32bit inode and ELD parsing:
|
||||
0001-conf-Use-ino64_t-to-save-and-compare-inode-numbers.patch
|
||||
0002-control-eld-fix-the-decoding-for-older-hw.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Wed Jun 1 05:51:17 UTC 2022 - Takashi Iwai <tiwai@suse.com>
|
||||
|
||||
|
@ -53,6 +53,8 @@ Source30: all_notes_off
|
||||
Source31: all_notes_off.bin
|
||||
Source32: all_notes_off.mid
|
||||
Source34: alsa-init.sh
|
||||
Patch1: 0001-conf-Use-ino64_t-to-save-and-compare-inode-numbers.patch
|
||||
Patch2: 0002-control-eld-fix-the-decoding-for-older-hw.patch
|
||||
# rest suse fixes
|
||||
Patch101: alsa-lib-ignore-non-accessible-ALSA_CONFIG_PATH.patch
|
||||
BuildRequires: doxygen
|
||||
@ -141,6 +143,8 @@ This package contains the library for ALSA topology support.
|
||||
|
||||
%prep
|
||||
%setup -q -n alsa-lib-%{version}
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch101 -p1
|
||||
|
||||
%build
|
||||
|
Loading…
Reference in New Issue
Block a user