diff --git a/repos/extra-x86_64/PKGBUILD b/repos/extra-x86_64/PKGBUILD index c00fbdedef66..74fdc6ab94e1 100644 --- a/repos/extra-x86_64/PKGBUILD +++ b/repos/extra-x86_64/PKGBUILD @@ -5,22 +5,26 @@ pkgbase=bluez pkgname=('bluez' 'bluez-utils' 'bluez-libs' 'bluez-cups' 'bluez-hid2hci' 'bluez-plugins') pkgver=5.55 -pkgrel=1 +pkgrel=2 url="http://www.bluez.org/" arch=('x86_64') license=('GPL2') makedepends=('dbus' 'libical' 'systemd' 'alsa-lib' 'json-c' 'ell') source=(https://www.kernel.org/pub/linux/bluetooth/${pkgname}-${pkgver}.tar.{xz,sign} + fix_crash_when_SEP_codec_has_not_been_initialized.patch bluetooth.modprobe) # see https://www.kernel.org/pub/linux/bluetooth/sha256sums.asc sha256sums=('8863717113c4897e2ad3271fc808ea245319e6fd95eed2e934fae8e0894e9b88' 'SKIP' + 'bc0a37ebea3f7e14d23a3a49964ee189bf4f79b96f839c754106dc73a7dfb6e9' '46c021be659c9a1c4e55afd04df0c059af1f3d98a96338236412e449bf7477b4') validpgpkeys=('E932D120BC2AEC444E558F0106CA9F5D1DCF2659') # Marcel Holtmann -#prepare() { -# cd "${pkgname}"-${pkgver} -#} +prepare() { + cd "${pkgname}"-${pkgver} + # FS#68671 - fix a segfault + patch -Np1 -i ../fix_crash_when_SEP_codec_has_not_been_initialized.patch +} build() { cd "${pkgname}"-${pkgver} diff --git a/repos/extra-x86_64/fix_crash_when_SEP_codec_has_not_been_initialized.patch b/repos/extra-x86_64/fix_crash_when_SEP_codec_has_not_been_initialized.patch new file mode 100644 index 000000000000..7b28d7f75b71 --- /dev/null +++ b/repos/extra-x86_64/fix_crash_when_SEP_codec_has_not_been_initialized.patch @@ -0,0 +1,45 @@ +From 326d70edd99c3f21cf299dba55214e2c8957e622 Mon Sep 17 00:00:00 2001 +From: Luiz Augusto von Dentz +Date: Mon, 23 Nov 2020 10:20:06 -0800 +Subject: [PATCH] a2dp: Fix crash when SEP codec has not been initialized + +If SEP has not been properly discovered avdtp_get_codec may return NULL +thus causing crashes such as: + +https://github.com/bluez/bluez/issues/57 +--- + profiles/audio/a2dp.c | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c +index 59d11a0aa..f1e4fa990 100644 +--- a/profiles/audio/a2dp.c ++++ b/profiles/audio/a2dp.c +@@ -1887,8 +1887,8 @@ static void register_remote_sep(void *data, void *user_data) + sep, remote_sep_free) == FALSE) { + error("Could not register remote sep %s", sep->path); + free(sep->path); +- sep->path = NULL; +- goto done; ++ free(sep); ++ return; + } + + DBG("Found remote SEP: %s", sep->path); +@@ -2627,10 +2627,15 @@ static void store_remote_sep(void *data, void *user_data) + GKeyFile *key_file = user_data; + char seid[4], value[256]; + struct avdtp_service_capability *service = avdtp_get_codec(sep->sep); +- struct avdtp_media_codec_capability *codec = (void *) service->data; ++ struct avdtp_media_codec_capability *codec; + unsigned int i; + ssize_t offset; + ++ if (!service) ++ return; ++ ++ codec = (void *) service->data; ++ + sprintf(seid, "%02hhx", avdtp_get_seid(sep->sep)); + + offset = sprintf(value, "%02hhx:%02hhx:%02hhx:",