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
next prev parent 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).