[linux-yocto] [PATCH] Bluetooth: Delay check for conn->smp in smp_conn_security()

wu.zheng at intel.com wu.zheng at intel.com
Thu Sep 10 22:02:59 PDT 2015


From: Wu Zheng <wu.zheng at intel.com>

There are several actions that smp_conn_security() might make that do
not require a valid SMP context (conn->smp pointer). One of these
actions is to encrypt the link with an existing LTK. If the SMP
context wasn't initialized properly we should still allow the
independent actions to be done, i.e. the check for the context should
only be done at the last possible moment.

At the same time, the patch fixes the error warning issues of 6lowpan
over Bluetooth LE connection failed between two Bluetooth LE devices.

Signed-off-by: Wu Zheng <wu.zheng at intel.com>

The patch was imported from the bluetooth git server
(http://git.kernel.org/cgit/linux/kernel/git/bluetooth/bluetooth-next.git)
as of commit id 0dd5c7aa199b25a88e9fa72824abaf0020ec8066.

Reported-by: Chuck Ebbert <cebbert.lkml at gmail.com>
Signed-off-by: Johan Hedberg <johan.hedberg at intel.com>
Signed-off-by: Marcel Holtmann <marcel at holtmann.org>
---
 net/bluetooth/smp.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/net/bluetooth/smp.c b/net/bluetooth/smp.c
index 7b815bc..69ad509 100644
--- a/net/bluetooth/smp.c
+++ b/net/bluetooth/smp.c
@@ -2294,12 +2294,6 @@ int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
 	if (!conn)
 		return 1;
 
-	chan = conn->smp;
-	if (!chan) {
-		BT_ERR("SMP security requested but not available");
-		return 1;
-	}
-
 	if (!hci_dev_test_flag(hcon->hdev, HCI_LE_ENABLED))
 		return 1;
 
@@ -2313,6 +2307,12 @@ int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
 		if (smp_ltk_encrypt(conn, hcon->pending_sec_level))
 			return 0;
 
+	chan = conn->smp;
+	if (!chan) {
+		BT_ERR("SMP security requested but not available");
+		return 1;
+	}
+
 	l2cap_chan_lock(chan);
 
 	/* If SMP is already in progress ignore this request */
-- 
2.1.4



More information about the linux-yocto mailing list