From 5af4cbf41254ef8ab37a3e061a27ca1e30262f19 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Pali=20Roh=C3=A1r?= Date: Sun, 3 May 2020 13:06:29 +0200 Subject: [PATCH] a2dp: Check for valid SEP in a2dp_reconfigure a2dp_reconfigure() is called as callback when local and remote SEP does not have to be valid anymore, sep->lsep can be NULL. This change fixes bluetoothd daemon crash (dereferencing NULL sep->lsep) when audio agent disconnect in the middle of the reconfigure call. Signed-off-by: Anuj Jain Signed-off-by: Ayush Garg --- profiles/audio/a2dp.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c index 44cd97e..4e15742 100644 --- a/profiles/audio/a2dp.c +++ b/profiles/audio/a2dp.c @@ -1249,6 +1249,12 @@ static gboolean a2dp_reconfigure(gpointer data) struct avdtp_media_codec_capability *rsep_codec; struct avdtp_service_capability *cap; + if (!sep->lsep) { + error("no valid local SEP"); + posix_err = -EINVAL; + goto failed; + } + if (setup->rsep) { cap = avdtp_get_codec(setup->rsep->sep); rsep_codec = (struct avdtp_media_codec_capability *) cap->data; @@ -1257,6 +1263,12 @@ static gboolean a2dp_reconfigure(gpointer data) if (!setup->rsep || sep->codec != rsep_codec->media_codec_type) setup->rsep = find_remote_sep(setup->chan, sep); + if (!setup->rsep) { + error("unable to find remote SEP"); + posix_err = -EINVAL; + goto failed; + } + posix_err = avdtp_set_configuration(setup->session, setup->rsep->sep, sep->lsep, setup->caps, -- 2.7.4