Re: [PATCH] Bluetooth: hci_sync: add conditional locking annotations

Nathan Chancellor <[email protected]> Fri, 31 Jul 2026 15:18:40 -0700
Newsgroups org.kernel.vger.linux-bluetooth
Message-ID <20260731221840.GA4066390@ax162>
On Sat, Jul 25, 2026 at 01:02:36PM +0300, Pauli Virtanen wrote:
> Add context analysis annotations to functions doing conditional locking,
> to suppress analysis warnings.
> 
> Fixes: a3ad01d51d4b ("Bluetooth: hci_sync: Fix advertising data UAFs")
> Signed-off-by: Pauli Virtanen <[email protected]>

Tested-by: Nathan Chancellor <[email protected]> # build

It would be nice if this could be applied, as this breaks recent clang
builds due to context analysis being on by default and -Werror enabled
by default with many configurations now:

  https://github.com/ClangBuiltLinux/continuous-integration2/actions/runs/30660246388

> ---
>  net/bluetooth/hci_sync.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c
> index d5554fbf3129..f5545f270f09 100644
> --- a/net/bluetooth/hci_sync.c
> +++ b/net/bluetooth/hci_sync.c
> @@ -1255,6 +1255,7 @@ hci_set_ext_adv_params_sync(struct hci_dev *hdev, u8 instance,
>  }
>  
>  static int hci_set_ext_adv_data_sync(struct hci_dev *hdev, u8 instance)
> +	__context_unsafe(/* conditional locking */)
>  {
>  	DEFINE_FLEX(struct hci_cp_le_set_ext_adv_data, pdu, data, length,
>  		    HCI_MAX_EXT_AD_LENGTH);
> @@ -1343,6 +1344,7 @@ int hci_update_adv_data_sync(struct hci_dev *hdev, u8 instance)
>  }
>  
>  int hci_setup_ext_adv_instance_sync(struct hci_dev *hdev, u8 instance)
> +	__context_unsafe(/* conditional locking */)
>  {
>  	struct hci_cp_le_set_ext_adv_params cp;
>  	struct hci_rp_le_set_ext_adv_params rp;
> @@ -1499,6 +1501,7 @@ int hci_setup_ext_adv_instance_sync(struct hci_dev *hdev, u8 instance)
>  }
>  
>  static int hci_set_ext_scan_rsp_data_sync(struct hci_dev *hdev, u8 instance)
> +	__context_unsafe(/* conditional locking */)
>  {
>  	DEFINE_FLEX(struct hci_cp_le_set_ext_scan_rsp_data, pdu, data, length,
>  		    HCI_MAX_EXT_AD_LENGTH);
> @@ -1552,6 +1555,7 @@ static int hci_set_ext_scan_rsp_data_sync(struct hci_dev *hdev, u8 instance)
>  }
>  
>  static int __hci_set_scan_rsp_data_sync(struct hci_dev *hdev, u8 instance)
> +	__context_unsafe(/* conditional locking */)
>  {
>  	struct hci_cp_le_set_scan_rsp_data cp;
>  	u8 len;
> @@ -1693,6 +1697,7 @@ static int hci_set_per_adv_params_sync(struct hci_dev *hdev, u8 instance,
>  }
>  
>  static int hci_set_per_adv_data_sync(struct hci_dev *hdev, u8 instance)
> +	__context_unsafe(/* conditional locking */)
>  {
>  	DEFINE_FLEX(struct hci_cp_le_set_per_adv_data, pdu, data, length,
>  		    HCI_MAX_PER_AD_LENGTH);
> -- 
> 2.55.0
> 

-- 
Cheers,
Nathan