Bluetooth: Add SMP flag to track which side is the initiator
authorJohan Hedberg <johan.hedberg@intel.com>
Mon, 24 Mar 2014 13:54:11 +0000 (15:54 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Mon, 24 Mar 2014 14:51:56 +0000 (07:51 -0700)
For remotely initiated just-works pairings we want to show the user a
confirmation dialog for the pairing. However, we can only know which
side was the initiator by tracking which side sends the first Security
Request or Pairing Request PDU. This patch adds a new SMP flag to
indicate whether our side was the initiator for the pairing.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/smp.c
net/bluetooth/smp.h

index 97e95c849fff1f785a9d79dc10f7445ac6134240..1b28f5fd798ffbb8002a3f4c89c6acd451aa5c50 100644 (file)
@@ -716,6 +716,8 @@ static u8 smp_cmd_pairing_req(struct l2cap_conn *conn, struct sk_buff *skb)
        if (ret)
                return SMP_UNSPECIFIED;
 
+       clear_bit(SMP_FLAG_INITIATOR, &smp->smp_flags);
+
        return 0;
 }
 
@@ -871,6 +873,8 @@ static u8 smp_cmd_security_req(struct l2cap_conn *conn, struct sk_buff *skb)
 
        smp_send_cmd(conn, SMP_CMD_PAIRING_REQ, sizeof(cp), &cp);
 
+       clear_bit(SMP_FLAG_INITIATOR, &smp->smp_flags);
+
        return 0;
 }
 
@@ -939,6 +943,8 @@ int smp_conn_security(struct hci_conn *hcon, __u8 sec_level)
        }
 
 done:
+       set_bit(SMP_FLAG_INITIATOR, &smp->smp_flags);
+
        hcon->pending_sec_level = sec_level;
 
        return 0;
index b6913471815a357aac91152cfa3b5bfd7ea7803f..0d536b8b3f9ad76eedb98a07af834c94a6180e66 100644 (file)
@@ -120,6 +120,7 @@ struct smp_cmd_security_req {
 #define SMP_FLAG_MITM_AUTH     3
 #define SMP_FLAG_LTK_ENCRYPT   4
 #define SMP_FLAG_COMPLETE      5
+#define SMP_FLAG_INITIATOR     6
 
 #define SMP_REENCRYPT_TIMEOUT  msecs_to_jiffies(500)