All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.