* [PATCH v3] a2dp: Fix crash when SEP codec has not been initialized
@ 2022-03-29 13:23 Frédéric Danis
2022-03-29 14:44 ` [v3] " bluez.test.bot
0 siblings, 1 reply; 2+ messages in thread
From: Frédéric Danis @ 2022-03-29 13:23 UTC (permalink / raw)
To: linux-bluetooth
If SEP has not been properly discovered avdtp_get_codec may return NULL
thus causing crashes such as when running AVRCP/TG/VLH/BI-01-C after
AVRCP/TG/RCR/BV-04-C.
The endpoint should not be registered if its codec is not available.
Remove A2DP channel seps queue empty check in store_remote_seps() as it
prevent to remove invalidated checkpoint if this is the only one saved.
---
v3: add a fix for the invalidated sep removale in cache
v2: don't register enpoint if its codec is unavailable
profiles/audio/a2dp.c | 25 +++++++++++++++++++------
1 file changed, 19 insertions(+), 6 deletions(-)
diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c
index c3ac432a7..7ad34bab9 100644
--- a/profiles/audio/a2dp.c
+++ b/profiles/audio/a2dp.c
@@ -829,9 +829,6 @@ static void store_remote_seps(struct a2dp_channel *chan)
char *data;
gsize length = 0;
- if (queue_isempty(chan->seps))
- return;
-
ba2str(device_get_address(device), dst_addr);
snprintf(filename, PATH_MAX, STORAGEDIR "/%s/cache/%s",
@@ -1993,7 +1990,12 @@ static gboolean get_codec(const GDBusPropertyTable *property,
{
struct a2dp_remote_sep *sep = data;
struct avdtp_service_capability *cap = avdtp_get_codec(sep->sep);
- struct avdtp_media_codec_capability *codec = (void *) cap->data;
+ struct avdtp_media_codec_capability *codec;
+
+ if (!cap)
+ return FALSE;
+
+ codec = (void *) cap->data;
dbus_message_iter_append_basic(iter, DBUS_TYPE_BYTE,
&codec->media_codec_type);
@@ -2006,10 +2008,16 @@ static gboolean get_capabilities(const GDBusPropertyTable *property,
{
struct a2dp_remote_sep *sep = data;
struct avdtp_service_capability *service = avdtp_get_codec(sep->sep);
- struct avdtp_media_codec_capability *codec = (void *) service->data;
- uint8_t *caps = codec->data;
+ struct avdtp_media_codec_capability *codec;
+ uint8_t *caps;
DBusMessageIter array;
+ if (!service)
+ return FALSE;
+
+ codec = (void *) service->data;
+ caps = codec->data;
+
dbus_message_iter_open_container(iter, DBUS_TYPE_ARRAY,
DBUS_TYPE_BYTE_AS_STRING, &array);
@@ -2074,6 +2082,11 @@ static struct a2dp_remote_sep *register_remote_sep(void *data, void *user_data)
if (sep)
return sep;
+ if (!avdtp_get_codec(rsep)) {
+ error("Unable to get remote sep codec");
+ return NULL;
+ }
+
sep = new0(struct a2dp_remote_sep, 1);
sep->chan = chan;
sep->sep = rsep;
--
2.25.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* RE: [v3] a2dp: Fix crash when SEP codec has not been initialized
2022-03-29 13:23 [PATCH v3] a2dp: Fix crash when SEP codec has not been initialized Frédéric Danis
@ 2022-03-29 14:44 ` bluez.test.bot
0 siblings, 0 replies; 2+ messages in thread
From: bluez.test.bot @ 2022-03-29 14:44 UTC (permalink / raw)
To: linux-bluetooth, frederic.danis
[-- Attachment #1: Type: text/plain, Size: 997 bytes --]
This is automated email and please do not reply to this email!
Dear submitter,
Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=627219
---Test result---
Test Summary:
CheckPatch PASS 1.52 seconds
GitLint PASS 1.00 seconds
Prep - Setup ELL PASS 52.78 seconds
Build - Prep PASS 0.76 seconds
Build - Configure PASS 10.69 seconds
Build - Make PASS 1501.55 seconds
Make Check PASS 13.29 seconds
Make Check w/Valgrind PASS 540.54 seconds
Make Distcheck PASS 283.94 seconds
Build w/ext ELL - Configure PASS 10.71 seconds
Build w/ext ELL - Make PASS 1468.92 seconds
Incremental Build with patchesPASS 0.00 seconds
---
Regards,
Linux Bluetooth
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2022-03-29 14:44 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-29 13:23 [PATCH v3] a2dp: Fix crash when SEP codec has not been initialized Frédéric Danis
2022-03-29 14:44 ` [v3] " bluez.test.bot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.