* [PATCH BlueZ] media: Fix possible crash when endpoint exit
@ 2012-09-21 13:12 Luiz Augusto von Dentz
2012-09-21 13:20 ` Johan Hedberg
0 siblings, 1 reply; 2+ messages in thread
From: Luiz Augusto von Dentz @ 2012-09-21 13:12 UTC (permalink / raw)
To: linux-bluetooth
From: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
a2dp_sep_unlock may free the endpoint if it is not registered anymore
which leads to destroying all related transport causing the following:
Invalid read of size 1
at 0x4A09F09: memcpy@GLIBC_2.2.5 (mc_replace_strmem.c:836)
by 0x4F7C02D: ??? (in /usr/lib64/libdbus-1.so.3.5.6)
by 0x4F7AAE5: ??? (in /usr/lib64/libdbus-1.so.3.5.6)
by 0x4F7B10B: ??? (in /usr/lib64/libdbus-1.so.3.5.6)
by 0x4F68DA0: ??? (in /usr/lib64/libdbus-1.so.3.5.6)
by 0x4F66788: ??? (in /usr/lib64/libdbus-1.so.3.5.6)
by 0x4F66B41: ??? (in /usr/lib64/libdbus-1.so.3.5.6)
by 0x4F6D64E: dbus_message_new_signal (in /usr/lib64/libdbus-1.so.3.5.6)
by 0x180FC2: emit_property_changed (dbus-common.c:130)
by 0x13FD15: transport_set_state (transport.c:206)
by 0x140519: suspend_a2dp (transport.c:460)
by 0x122436: service_filter (watch.c:476)
Address 0x6546110 is 48 bytes inside a block of size 49 free'd
at 0x4A079AE: free (vg_replace_malloc.c:427)
by 0x4C8037E: g_free (in /usr/lib64/libglib-2.0.so.0.3200.4)
by 0x1409F9: media_transport_free (transport.c:1160)
by 0x12282F: remove_interface (object.c:553)
by 0x123699: g_dbus_unregister_interface (object.c:1231)
by 0x141547: media_transport_destroy (transport.c:228)
by 0x4C95ACC: g_slist_foreach (in /usr/lib64/libglib-2.0.so.0.3200.4)
by 0x4C95AEA: g_slist_free_full (in /usr/lib64/libglib-2.0.so.0.3200.4)
by 0x13E53D: media_endpoint_remove (media.c:162)
by 0x133F62: a2dp_unregister_sep (a2dp.c:1247)
by 0x1369D7: a2dp_sep_unlock (a2dp.c:1814)
by 0x1404D3: suspend_a2dp (transport.c:455)
---
audio/transport.c | 16 ++++++----------
1 file changed, 6 insertions(+), 10 deletions(-)
diff --git a/audio/transport.c b/audio/transport.c
index 281895e..23e7ddd 100644
--- a/audio/transport.c
+++ b/audio/transport.c
@@ -451,18 +451,14 @@ static guint suspend_a2dp(struct media_transport *transport,
struct media_endpoint *endpoint = transport->endpoint;
struct a2dp_sep *sep = media_endpoint_get_sep(endpoint);
- if (!owner) {
- a2dp_sep_unlock(sep, a2dp->session);
-
- if (a2dp_sep_is_playing(sep))
- transport_set_state(transport, TRANSPORT_STATE_PENDING);
- else
- transport_set_state(transport, TRANSPORT_STATE_IDLE);
+ if (owner != NULL)
+ return a2dp_suspend(a2dp->session, sep, a2dp_suspend_complete,
+ owner);
- return 0;
- }
+ transport_set_state(transport, TRANSPORT_STATE_IDLE);
+ a2dp_sep_unlock(sep, a2dp->session);
- return a2dp_suspend(a2dp->session, sep, a2dp_suspend_complete, owner);
+ return 0;
}
static void cancel_a2dp(struct media_transport *transport, guint id)
--
1.7.11.4
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH BlueZ] media: Fix possible crash when endpoint exit
2012-09-21 13:12 [PATCH BlueZ] media: Fix possible crash when endpoint exit Luiz Augusto von Dentz
@ 2012-09-21 13:20 ` Johan Hedberg
0 siblings, 0 replies; 2+ messages in thread
From: Johan Hedberg @ 2012-09-21 13:20 UTC (permalink / raw)
To: Luiz Augusto von Dentz; +Cc: linux-bluetooth
Hi Luiz,
On Fri, Sep 21, 2012, Luiz Augusto von Dentz wrote:
> a2dp_sep_unlock may free the endpoint if it is not registered anymore
> which leads to destroying all related transport causing the following:
>
> Invalid read of size 1
> at 0x4A09F09: memcpy@GLIBC_2.2.5 (mc_replace_strmem.c:836)
> by 0x4F7C02D: ??? (in /usr/lib64/libdbus-1.so.3.5.6)
> by 0x4F7AAE5: ??? (in /usr/lib64/libdbus-1.so.3.5.6)
> by 0x4F7B10B: ??? (in /usr/lib64/libdbus-1.so.3.5.6)
> by 0x4F68DA0: ??? (in /usr/lib64/libdbus-1.so.3.5.6)
> by 0x4F66788: ??? (in /usr/lib64/libdbus-1.so.3.5.6)
> by 0x4F66B41: ??? (in /usr/lib64/libdbus-1.so.3.5.6)
> by 0x4F6D64E: dbus_message_new_signal (in /usr/lib64/libdbus-1.so.3.5.6)
> by 0x180FC2: emit_property_changed (dbus-common.c:130)
> by 0x13FD15: transport_set_state (transport.c:206)
> by 0x140519: suspend_a2dp (transport.c:460)
> by 0x122436: service_filter (watch.c:476)
> Address 0x6546110 is 48 bytes inside a block of size 49 free'd
> at 0x4A079AE: free (vg_replace_malloc.c:427)
> by 0x4C8037E: g_free (in /usr/lib64/libglib-2.0.so.0.3200.4)
> by 0x1409F9: media_transport_free (transport.c:1160)
> by 0x12282F: remove_interface (object.c:553)
> by 0x123699: g_dbus_unregister_interface (object.c:1231)
> by 0x141547: media_transport_destroy (transport.c:228)
> by 0x4C95ACC: g_slist_foreach (in /usr/lib64/libglib-2.0.so.0.3200.4)
> by 0x4C95AEA: g_slist_free_full (in /usr/lib64/libglib-2.0.so.0.3200.4)
> by 0x13E53D: media_endpoint_remove (media.c:162)
> by 0x133F62: a2dp_unregister_sep (a2dp.c:1247)
> by 0x1369D7: a2dp_sep_unlock (a2dp.c:1814)
> by 0x1404D3: suspend_a2dp (transport.c:455)
> ---
> audio/transport.c | 16 ++++++----------
> 1 file changed, 6 insertions(+), 10 deletions(-)
Applied. Thanks.
Johan
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2012-09-21 13:20 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-21 13:12 [PATCH BlueZ] media: Fix possible crash when endpoint exit Luiz Augusto von Dentz
2012-09-21 13:20 ` Johan Hedberg
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox