Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fea7b02f authored by Dean Jenkins's avatar Dean Jenkins Committed by Gustavo Padovan
Browse files

Bluetooth: Avoid rfcomm_session_timeout using freed session



Use del_timer_sync() instead of del_timer() as this ensures
that rfcomm_session_timeout() is not running on a different
CPU when rfcomm_session_put() is called. This avoids a race
condition on SMP systems because potentially
rfcomm_session_timeout() could reuse the freed RFCOMM session
structure caused by the execution of rfcomm_session_put().

Note that this modification makes the reason for the RFCOMM
session refcnt mechanism redundant.

Signed-off-by: default avatarDean Jenkins <Dean_Jenkins@mentor.com>
Acked-by: default avatarMarcel Holtmann <marcel@holtmann.org>
Signed-off-by: default avatarGustavo Padovan <gustavo.padovan@collabora.co.uk>
parent be9f97f0
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -257,7 +257,7 @@ static void rfcomm_session_clear_timer(struct rfcomm_session *s)
{
{
	BT_DBG("session %p state %ld", s, s->state);
	BT_DBG("session %p state %ld", s, s->state);


	if (del_timer(&s->timer))
	if (del_timer_sync(&s->timer))
		rfcomm_session_put(s);
		rfcomm_session_put(s);
}
}