Re: [PATCH 6.12 597/602] Bluetooth: hci_conn: Fix running bis_cleanup for hci_conn->type PA_LINK

Harshit Mogalapalli <[email protected]>
Newsgroups org.kernel.vger.stable,dev.linux.lists.patches
Message-ID <[email protected]>
Hi Greg,

On 30/07/26 7:46 pm, Greg Kroah-Hartman wrote:
> 6.12-stable review patch.  If anyone has any objections, please let me know.
> 
> ------------------
> 
> From: Luiz Augusto von Dentz <[email protected]>
> 
> commit d36349ea73d805bb72cbc24ab90cb1da4ad5c379 upstream.
> 
> Connections with type of PA_LINK shall be considered temporary just to
> track the lifetime of PA Sync setup, once the BIG Sync is established
> and connection are created with BIS_LINK the existing PA_LINK
> connection shall not longer use bis_cleanup otherwise it terminates the
> PA Sync when that shall be left to BIS_LINK connection to do it.
> 
> Fixes: a7bcffc673de ("Bluetooth: Add PA_LINK to distinguish BIG sync and PA sync connections")
> Signed-off-by: Luiz Augusto von Dentz <[email protected]>
> Signed-off-by: Greg Kroah-Hartman <[email protected]>
> ---
>   net/bluetooth/hci_conn.c  |   10 +++++++++-
>   net/bluetooth/hci_event.c |    7 ++++++-
>   2 files changed, 15 insertions(+), 2 deletions(-)
> 
> --- a/net/bluetooth/hci_conn.c
> +++ b/net/bluetooth/hci_conn.c
> @@ -830,7 +830,15 @@ static void bis_cleanup(struct hci_conn
>   		/* Check if ISO connection is a BIS and terminate advertising
>   		 * set and BIG if there are no other connections using it.
>   		 */
> -		bis = hci_conn_hash_lookup_big(hdev, conn->iso_qos.bcast.big);
> +		bis = hci_conn_hash_lookup_big_state(hdev,
> +						     conn->iso_qos.bcast.big,
> +						     BT_CONNECTED);
> +		if (bis)
> +			return;
> +
> +		bis = hci_conn_hash_lookup_big_state(hdev,
> +						     conn->iso_qos.bcast.big,
> +						     BT_CONNECT);
>   		if (bis)
>   			return;


I have run an AI assisted backport review and it spotted an issue. I
have taken a look, and the two BIG-state lookups lost an upstream role
restriction.

Upstream d36349ea73d8 has:

     hci_conn_hash_lookup_big_state(hdev, big, BT_CONNECTED,
                                    HCI_ROLE_MASTER);

and the same HCI_ROLE_MASTER restriction for BT_CONNECT.

The 6.12.y backport calls the older three-argument helper:

     hci_conn_hash_lookup_big_state(hdev, big, BT_CONNECTED);

That helper accepts either role. The 6.12 tree also creates slave-role
BIS connections during BIG Sync establishment, so a slave BIS with the
same BIG handle and state can satisfy this lookup and suppress cleanup
of the unrelated master BIG.

I think 6.12.y misses commit b2a5f2e1c127
("Bluetooth: hci_event: Add support for handling LE BIG Sync Lost
event"), which adds the role-aware helper and updates its callers, so we 
might want to apply this as well and then reapply this ?


thanks,
Harshit> --- a/net/bluetooth/hci_event.c
> +++ b/net/bluetooth/hci_event.c
> @@ -7026,9 +7026,14 @@ static void hci_le_big_sync_established_
>   				continue;
>   		}
>   
> -		if (ev->status != 0x42)
> +		if (ev->status != 0x42) {
>   			/* Mark PA sync as established */
>   			set_bit(HCI_CONN_PA_SYNC, &bis->flags);
> +			/* Reset cleanup callback of PA Sync so it doesn't
> +			 * terminate the sync when deleting the connection.
> +			 */
> +			conn->cleanup = NULL;
> +		}
>   
>   		bis->sync_handle = conn->sync_handle;
>   		bis->iso_qos.bcast.big = ev->handle;
> 
> 
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.