Bluetooth: Fix IRK distribution issue when Privacy is disabled
authorh.sandeep <h.sandeep@samsung.com>
Mon, 21 Nov 2016 11:14:42 +0000 (16:44 +0530)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Wed, 14 Dec 2016 04:53:30 +0000 (13:53 +0900)
The devices, like Android 6.x, which don't support privacy 1.2
couldn't make BLE connection to the device which doesn't distribute
IRK when pairing because they use use wrong address type.
For compatibility, it needs to distribute IRK even though Privacy
feature is disabled. So setting IRK interface is added and BlueZ
will set IRK if privacy feature is disabled. And when BLE pairing,
IRK will be always distributed.

Change-Id: I6dbcef9663a1a0cb2b7db89cad6e725025e41fa1
Signed-off-by: h.sandeep <h.sandeep@samsung.com>
net/bluetooth/smp.c

index 69ad5091e2cef35a05ee0c96efc87dfe6f50d99b..b5d4bb749b7290bff901da8cd8d56f69991cbef1 100644 (file)
 /* Maximum message length that can be passed to aes_cmac */
 #define CMAC_MSG_MAX   80
 
+#ifdef TIZEN_BT
+#define ZERO_KEY "\x00\x00\x00\x00\x00\x00\x00\x00" \
+                "\x00\x00\x00\x00\x00\x00\x00\x00"
+#endif
+
 enum {
        SMP_FLAG_TK_VALID,
        SMP_FLAG_CFM_PENDING,
@@ -660,8 +665,13 @@ static void build_pairing_cmd(struct l2cap_conn *conn,
        if (hci_dev_test_flag(hdev, HCI_RPA_RESOLVING))
                remote_dist |= SMP_DIST_ID_KEY;
 
+#ifdef TIZEN_BT
+       if (memcmp(hdev->irk, ZERO_KEY, 16))
+               local_dist |= SMP_DIST_ID_KEY;
+#else
        if (hci_dev_test_flag(hdev, HCI_PRIVACY))
                local_dist |= SMP_DIST_ID_KEY;
+#endif
 
        if (hci_dev_test_flag(hdev, HCI_SC_ENABLED) &&
            (authreq & SMP_AUTH_SC)) {