diff mbox series

[BlueZ] media: Fix crash when endpoint replies with an error to SetConfiguration

Message ID 20220112153529.338208-1-luiz.dentz@gmail.com
State New
Headers show
Series [BlueZ] media: Fix crash when endpoint replies with an error to SetConfiguration | expand

Commit Message

Luiz Augusto von Dentz Jan. 12, 2022, 3:35 p.m. UTC
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>

If endpoint responds to SetConfiguration the transport is being
destroyed without removing it from the list leading a crash.

Fixes: https://github.com/bluez/bluez/issues/269
---
 profiles/audio/media.c | 21 +++++++++++++--------
 1 file changed, 13 insertions(+), 8 deletions(-)

Comments

bluez.test.bot@gmail.com Jan. 12, 2022, 4:58 p.m. UTC | #1
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=604907

---Test result---

Test Summary:
CheckPatch                    PASS      1.44 seconds
GitLint                       PASS      1.00 seconds
Prep - Setup ELL              PASS      40.83 seconds
Build - Prep                  PASS      0.70 seconds
Build - Configure             PASS      8.44 seconds
Build - Make                  PASS      1376.47 seconds
Make Check                    PASS      11.17 seconds
Make Check w/Valgrind         PASS      431.65 seconds
Make Distcheck                PASS      225.72 seconds
Build w/ext ELL - Configure   PASS      8.40 seconds
Build w/ext ELL - Make        PASS      1364.92 seconds
Incremental Build with patchesPASS      0.00 seconds



---
Regards,
Linux Bluetooth
Luiz Augusto von Dentz Jan. 13, 2022, 9:37 p.m. UTC | #2
Hi,

On Wed, Jan 12, 2022 at 8:58 AM <bluez.test.bot@gmail.com> wrote:
>
> 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=604907
>
> ---Test result---
>
> Test Summary:
> CheckPatch                    PASS      1.44 seconds
> GitLint                       PASS      1.00 seconds
> Prep - Setup ELL              PASS      40.83 seconds
> Build - Prep                  PASS      0.70 seconds
> Build - Configure             PASS      8.44 seconds
> Build - Make                  PASS      1376.47 seconds
> Make Check                    PASS      11.17 seconds
> Make Check w/Valgrind         PASS      431.65 seconds
> Make Distcheck                PASS      225.72 seconds
> Build w/ext ELL - Configure   PASS      8.40 seconds
> Build w/ext ELL - Make        PASS      1364.92 seconds
> Incremental Build with patchesPASS      0.00 seconds
>
>
>
> ---
> Regards,
> Linux Bluetooth

Pushed.
diff mbox series

Patch

diff --git a/profiles/audio/media.c b/profiles/audio/media.c
index edefedc90..8162417ce 100644
--- a/profiles/audio/media.c
+++ b/profiles/audio/media.c
@@ -241,6 +241,16 @@  static struct media_adapter *find_adapter(struct btd_device *device)
 	return NULL;
 }
 
+static void endpoint_remove_transport(struct media_endpoint *endpoint,
+					struct media_transport *transport)
+{
+	if (!endpoint || !transport)
+		return;
+
+	endpoint->transports = g_slist_remove(endpoint->transports, transport);
+	media_transport_destroy(transport);
+}
+
 static void clear_configuration(struct media_endpoint *endpoint,
 					struct media_transport *transport)
 {
@@ -260,8 +270,7 @@  static void clear_configuration(struct media_endpoint *endpoint,
 							DBUS_TYPE_INVALID);
 	g_dbus_send_message(btd_get_dbus_connection(), msg);
 done:
-	endpoint->transports = g_slist_remove(endpoint->transports, transport);
-	media_transport_destroy(transport);
+	endpoint_remove_transport(endpoint, transport);
 }
 
 static void clear_endpoint(struct media_endpoint *endpoint)
@@ -301,12 +310,8 @@  static void endpoint_reply(DBusPendingCall *call, void *user_data)
 
 		if (dbus_message_is_method_call(request->msg,
 					MEDIA_ENDPOINT_INTERFACE,
-					"SetConfiguration")) {
-			if (request->transport == NULL)
-				error("Expected to destroy transport");
-			else
-				media_transport_destroy(request->transport);
-		}
+					"SetConfiguration"))
+			endpoint_remove_transport(endpoint, request->transport);
 
 		dbus_error_free(&err);
 		goto done;