linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Brian Gix <bgix@codeaurora.org>
To: Vinicius Costa Gomes <vinicius.gomes@openbossa.org>
Cc: linux-bluetooth@vger.kernel.org
Subject: Re: [PATCH 3/8] Bluetooth: Add new structures for handling SMP Long Term Keys
Date: Fri, 13 Jan 2012 12:43:18 -0800	[thread overview]
Message-ID: <4F109766.5040703@codeaurora.org> (raw)
In-Reply-To: <1326483580-11243-4-git-send-email-vinicius.gomes@openbossa.org>

Hi Vinicius,

On 1/13/2012 11:39 AM, Vinicius Costa Gomes wrote:
> This includes a new list for storing the keys and a new structure used
> to represent each key.
>
> Some notes: authenticated is used to identify that the key may be used
> to setup a HIGH security link. As the same list is used to store both
> the STK's and the LTK's the type field is used so we can separate
> between those two types of keys and if the key should be used when
> in the master or slave role.
>
> Signed-off-by: Vinicius Costa Gomes<vinicius.gomes@openbossa.org>
> ---
>   include/net/bluetooth/hci.h      |    5 +++++
>   include/net/bluetooth/hci_core.h |   15 +++++++++++++++
>   net/bluetooth/hci_core.c         |   31 +++++++++++++++++++++++++++++++
>   3 files changed, 51 insertions(+), 0 deletions(-)
>
> diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
> index 8499307..3056115 100644
> --- a/include/net/bluetooth/hci.h
> +++ b/include/net/bluetooth/hci.h
> @@ -273,6 +273,11 @@ enum {
>   #define HCI_LK_SMP_LTK			0x81
>   #define HCI_LK_SMP_IRK			0x82
>   #define HCI_LK_SMP_CSRK			0x83
> +/* The spec doesn't define types for SMP keys, the _MASTER suffix is implied */
> +#define HCI_SMP_STK			0x80
> +#define HCI_SMP_STK_SLAVE		0x81
> +#define HCI_SMP_LTK			0x82
> +#define HCI_SMP_LTK_SLAVE		0x83

This list should be contiguous, and you should probably remove the 
others at the same time.  I would also suggest adding MASTER and SLAVE 
versions of CSRK and maybe IRK as well. (IRK is used differently, and 
may not need a Master/Slave version, but it wouldn't hurt anything). 
CSRK, when implimented will definitely need both Master and Slave versions.

>
>   /* ---- HCI Error Codes ---- */
>   #define HCI_ERROR_AUTH_FAILURE		0x05
> diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
> index 59e3541..9d77a66 100644
> --- a/include/net/bluetooth/hci_core.h
> +++ b/include/net/bluetooth/hci_core.h
> @@ -88,6 +88,18 @@ struct bt_uuid {
>   	u8 svc_hint;
>   };
>
> +struct smp_ltk {
> +	struct list_head list;
> +	bdaddr_t bdaddr;
> +	u8 bdaddr_type;
> +	u8 authenticated;
> +	u8 type;
> +	u8 enc_size;
> +	__le16 ediv;
> +	u8 rand[8];
> +	u8 val[16];
> +} __packed;
> +
>   struct key_master_id {
>   	__le16 ediv;
>   	u8 rand[8];
> @@ -240,6 +252,8 @@ struct hci_dev {
>
>   	struct list_head	link_keys;
>
> +	struct list_head	ltks;
> +
>   	struct list_head	remote_oob_data;
>
>   	struct list_head	adv_entries;
> @@ -643,6 +657,7 @@ struct link_key *hci_find_link_key_type(struct hci_dev *hdev,
>   int hci_add_ltk(struct hci_dev *hdev, int new_key, bdaddr_t *bdaddr,
>   			u8 key_size, __le16 ediv, u8 rand[8], u8 ltk[16]);
>   int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
> +int hci_smp_ltks_clear(struct hci_dev *hdev);
>
>   int hci_remote_oob_data_clear(struct hci_dev *hdev);
>   struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev,
> diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
> index a7b7200..3b5902d 100644
> --- a/net/bluetooth/hci_core.c
> +++ b/net/bluetooth/hci_core.c
> @@ -1163,6 +1163,18 @@ int hci_link_keys_clear(struct hci_dev *hdev)
>   	return 0;
>   }
>
> +int hci_smp_ltks_clear(struct hci_dev *hdev)
> +{
> +	struct smp_ltk *k, *tmp;
> +
> +	list_for_each_entry_safe(k, tmp,&hdev->ltks, list) {
> +		list_del(&k->list);
> +		kfree(k);
> +	}
> +
> +	return 0;
> +}
> +
>   struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)
>   {
>   	struct link_key *k;
> @@ -1355,6 +1367,23 @@ int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)
>   	return 0;
>   }
>
> +int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr)
> +{
> +	struct smp_ltk *k, *tmp;
> +
> +	list_for_each_entry_safe(k, tmp,&hdev->ltks, list) {
> +		if (bacmp(bdaddr,&k->bdaddr))
> +			continue;
> +
> +		BT_DBG("%s removing %s", hdev->name, batostr(bdaddr));
> +
> +		list_del(&k->list);
> +		kfree(k);
> +	}
> +
> +	return 0;
> +}
> +
>   /* HCI command timer function */
>   static void hci_cmd_timer(unsigned long arg)
>   {
> @@ -1638,6 +1667,7 @@ int hci_register_dev(struct hci_dev *hdev)
>   	INIT_LIST_HEAD(&hdev->uuids);
>
>   	INIT_LIST_HEAD(&hdev->link_keys);
> +	INIT_LIST_HEAD(&hdev->ltks);
>
>   	INIT_LIST_HEAD(&hdev->remote_oob_data);
>
> @@ -1739,6 +1769,7 @@ void hci_unregister_dev(struct hci_dev *hdev)
>   	hci_blacklist_clear(hdev);
>   	hci_uuids_clear(hdev);
>   	hci_link_keys_clear(hdev);
> +	hci_smp_ltks_clear(hdev);
>   	hci_remote_oob_data_clear(hdev);
>   	hci_adv_entries_clear(hdev);
>   	hci_dev_unlock(hdev);


-- 
Brian Gix
bgix@codeaurora.org
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum

  reply	other threads:[~2012-01-13 20:43 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-01-13 19:39 [PATCH 0/8] New MGMT messages for SMP Long Term Keys Vinicius Costa Gomes
2012-01-13 19:39 ` [PATCH 1/8] Bluetooth: Add structures for the new LTK exchange messages Vinicius Costa Gomes
2012-01-13 20:37   ` Brian Gix
2012-01-13 20:40     ` Vinicius Costa Gomes
2012-01-17  0:14       ` Vinicius Costa Gomes
2012-01-13 19:39 ` [PATCH 2/8] Bluetooth: Rename smp_key_size to enc_key_size Vinicius Costa Gomes
2012-01-13 19:39 ` [PATCH 3/8] Bluetooth: Add new structures for handling SMP Long Term Keys Vinicius Costa Gomes
2012-01-13 20:43   ` Brian Gix [this message]
2012-01-13 19:39 ` [PATCH 4/8] Bluetooth: Use the updated key structures for handling LTKs Vinicius Costa Gomes
2012-01-13 20:52   ` Brian Gix
2012-01-13 21:43     ` Vinicius Costa Gomes
2012-01-17  0:17       ` Vinicius Costa Gomes
2012-01-13 19:39 ` [PATCH 5/8] Bluetooth: Add MGMT handlers for dealing with SMP LTK's Vinicius Costa Gomes
2012-01-13 19:39 ` [PATCH 6/8] Bluetooth: Add support for removing LTK's when pairing is removed Vinicius Costa Gomes
2012-01-13 19:39 ` [PATCH 7/8] Bluetooth: Clean up structures left unused Vinicius Costa Gomes
2012-01-13 19:39 ` [PATCH 8/8] Bluetooth: Add support for notifying userspace of new LTK's Vinicius Costa Gomes
  -- strict thread matches above, loose matches on Subject: below --
2012-01-30 22:29 [PATCH 0/8] [Resend] New MGMT messages for SMP Long Term Keys Vinicius Costa Gomes
2012-01-30 22:29 ` [PATCH 3/8] Bluetooth: Add new structures for handling " Vinicius Costa Gomes
2012-01-30 22:42   ` Marcel Holtmann
2012-01-30 23:13     ` Vinicius Costa Gomes

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4F109766.5040703@codeaurora.org \
    --to=bgix@codeaurora.org \
    --cc=linux-bluetooth@vger.kernel.org \
    --cc=vinicius.gomes@openbossa.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).