Re: [PATCH] Bluetooth: Temporary keys should be retained during connection

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

 



Hi Vishal,

On Wed, Apr 04, 2012, Vishal Agarwal wrote:
> If a key is non persistent then it should not be used in future
> connections but it should be kept for current connection. And it
> should be removed when connecion is removed.
> 
> Signed-off-by: Vishal Agarwal <vishal.agarwal@xxxxxxxxxxxxxx>
> ---
>  include/net/bluetooth/hci_core.h |    1 +
>  net/bluetooth/hci_core.c         |    8 ++++----
>  net/bluetooth/mgmt.c             |    6 ++++++
>  3 files changed, 11 insertions(+), 4 deletions(-)

Firstly, did you verify that this fixes your test case? You still didn't
tell us what test case this is, btw.

> --- a/net/bluetooth/hci_core.c
> +++ b/net/bluetooth/hci_core.c
> @@ -1330,10 +1330,10 @@ int hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, int new_key,
>  
>  	mgmt_new_link_key(hdev, key, persistent);
>  
> -	if (!persistent) {
> -		list_del(&key->list);
> -		kfree(key);
> -	}
> +	if (persistent)
> +		conn->temp_link_key = false;
> +	else
> +		conn->temp_link_key = true;
>  
>  	return 0;
>  }
> diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
> index b4f7e32..bc6f89e 100644
> --- a/net/bluetooth/mgmt.c
> +++ b/net/bluetooth/mgmt.c
> @@ -3060,12 +3060,18 @@ int mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr,
>  {
>  	struct mgmt_addr_info ev;
>  	struct sock *sk = NULL;
> +	struct hci_conn *conn;
>  	int err;
>  
>  	mgmt_pending_foreach(MGMT_OP_DISCONNECT, hdev, disconnect_rsp, &sk);
>  
>  	bacpy(&ev.bdaddr, bdaddr);
>  	ev.type = link_to_mgmt(link_type, addr_type);
> +	if (link_type == ACL_LINK) {
> +		conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, bdaddr);
> +		if (conn->temp_link_key)
> +			hci_remove_link_key(hdev, bdaddr);
> +	}
>  
>  	err = mgmt_event(MGMT_EV_DEVICE_DISCONNECTED, hdev, &ev, sizeof(ev),
>  			 sk);

Since setting the flag is outside of mgmt.c I think the removal should
also be. That way you also avoid an extra call to
hci_conn_hash_lookup_ba. I.e. please put the removal in
hci_disconn_complete_evt.

I'd also still like to hear your opinion of the second option I
proposed. If you had a reference to struct link_key in hci_conn then
you'd just need to call list_del() and nothing else to remove it (i.e.
no iteration of hdev->link_keys necessary.

Johan
--
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