2013-07-31 19:25:28

by Andre Guedes

[permalink] [raw]
Subject: [PATCH 1/2] Bluetooth: Fix security level for peripheral role

While playing the peripheral role, the host gets a LE Long Term Key
Request Event from the controller when a connection is established
with a bonded device. The host then informs the LTK which should be
used for the connection. Once the link is encrypted, the host gets
an Encryption Change Event.

Therefore we should set conn->pending_sec_level instead of conn->
sec_level in hci_le_ltk_request_evt. This way, conn->sec_level is
properly updated in hci_encrypt_change_evt.

Moreover, since we have a LTK associated to the device, we have at
least BT_SECURITY_MEDIUM security level.

Signed-off-by: Andre Guedes <[email protected]>
---
net/bluetooth/hci_event.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 50e39f4..ea993ab 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -3556,7 +3556,9 @@ static void hci_le_ltk_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
cp.handle = cpu_to_le16(conn->handle);

if (ltk->authenticated)
- conn->sec_level = BT_SECURITY_HIGH;
+ conn->pending_sec_level = BT_SECURITY_HIGH;
+ else
+ conn->pending_sec_level = BT_SECURITY_MEDIUM;

hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp);

--
1.8.3.4



2013-07-31 19:25:29

by Andre Guedes

[permalink] [raw]
Subject: [PATCH 2/2] Bluetooth: Fix encryption key size for peripheral role

This patch fixes the connection encryption key size information when
the host is playing the peripheral role. We should set conn->enc_key_
size in hci_le_ltk_request_evt, otherwise it is left uninitialized.

Signed-off-by: Andre Guedes <[email protected]>
---
net/bluetooth/hci_event.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index ea993ab..bc56245 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -3560,6 +3560,8 @@ static void hci_le_ltk_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
else
conn->pending_sec_level = BT_SECURITY_MEDIUM;

+ conn->enc_key_size = ltk->enc_size;
+
hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp);

if (ltk->type & HCI_SMP_STK) {
--
1.8.3.4


2013-08-20 12:14:22

by Andre Guedes

[permalink] [raw]
Subject: Re: [PATCH 1/2] Bluetooth: Fix security level for peripheral role

Ping.

On Wed, Jul 31, 2013 at 4:25 PM, Andre Guedes
<[email protected]> wrote:
> While playing the peripheral role, the host gets a LE Long Term Key
> Request Event from the controller when a connection is established
> with a bonded device. The host then informs the LTK which should be
> used for the connection. Once the link is encrypted, the host gets
> an Encryption Change Event.
>
> Therefore we should set conn->pending_sec_level instead of conn->
> sec_level in hci_le_ltk_request_evt. This way, conn->sec_level is
> properly updated in hci_encrypt_change_evt.
>
> Moreover, since we have a LTK associated to the device, we have at
> least BT_SECURITY_MEDIUM security level.
>
> Signed-off-by: Andre Guedes <[email protected]>
> ---
> net/bluetooth/hci_event.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
> index 50e39f4..ea993ab 100644
> --- a/net/bluetooth/hci_event.c
> +++ b/net/bluetooth/hci_event.c
> @@ -3556,7 +3556,9 @@ static void hci_le_ltk_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
> cp.handle = cpu_to_le16(conn->handle);
>
> if (ltk->authenticated)
> - conn->sec_level = BT_SECURITY_HIGH;
> + conn->pending_sec_level = BT_SECURITY_HIGH;
> + else
> + conn->pending_sec_level = BT_SECURITY_MEDIUM;
>
> hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp);
>
> --
> 1.8.3.4
>

2013-09-01 17:09:12

by Gustavo Padovan

[permalink] [raw]
Subject: Re: [PATCH 2/2] Bluetooth: Fix encryption key size for peripheral role

Hi Andre,

2013-07-31 Andre Guedes <[email protected]>:

> This patch fixes the connection encryption key size information when
> the host is playing the peripheral role. We should set conn->enc_key_
> size in hci_le_ltk_request_evt, otherwise it is left uninitialized.
>
> Signed-off-by: Andre Guedes <[email protected]>
> ---
> net/bluetooth/hci_event.c | 2 ++
> 1 file changed, 2 insertions(+)

Patches have been applied to bluetooth.git. Thanks.

Gustavo