Re: [PATCH BlueZ 1/2] audio/avrcp: Fix crash if no player is available

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Wed, Jun 15, 2016 at 3:26 PM, Luiz Augusto von Dentz
<luiz.dentz@xxxxxxxxx> wrote:
> From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx>
>
> It seems some Samsung Android devices may actually report no players
> at all causing the following crash:
>
> Program terminated with signal 11, Segmentation fault.
>   #0  set_ct_player (player=0x0, session=<value optimized out>)
>     at profiles/audio/avrcp.c:3139
>   #1  0xb76c0aab in player_remove (data=0xb849a100)
>     at profiles/audio/avrcp.c:3278
> ---
>  profiles/audio/avrcp.c | 11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
>
> diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c
> index 6c8ed81..c100149 100644
> --- a/profiles/audio/avrcp.c
> +++ b/profiles/audio/avrcp.c
> @@ -3200,7 +3200,8 @@ static void set_ct_player(struct avrcp *session, struct avrcp_player *player)
>
>         session->controller->player = player;
>         service = btd_device_get_service(session->dev, AVRCP_TARGET_UUID);
> -       control_set_player(service, media_player_get_path(player->user_data));
> +       control_set_player(service, player ?
> +                       media_player_get_path(player->user_data) : NULL);
>  }
>
>  static struct avrcp_player *create_ct_player(struct avrcp *session,
> @@ -3330,6 +3331,10 @@ static void player_remove(gpointer data)
>         struct avrcp_player *player = data;
>         GSList *l;
>
> +       /* Don't remove reserved player */
> +       if (!player->id)
> +               return;
> +
>         for (l = player->sessions; l; l = l->next) {
>                 struct avrcp *session = l->data;
>                 struct avrcp_data *controller = session->controller;
> @@ -3393,6 +3398,10 @@ static gboolean avrcp_get_media_player_list_rsp(struct avctp *conn,
>
>         g_slist_free_full(removed, player_remove);
>
> +       /* There should always be an active player */
> +       if (!session->controller->player)
> +               create_ct_player(session, 0);
> +
>         return FALSE;
>  }
>
> --
> 2.5.5

Applied.


-- 
Luiz Augusto von Dentz
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux