Bluetooth: Fix verifying confirm value when lacking remote OOB data
authorJohan Hedberg <johan.hedberg@intel.com>
Mon, 16 Mar 2015 09:45:46 +0000 (11:45 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Mon, 16 Mar 2015 16:16:46 +0000 (17:16 +0100)
If we haven't received remote OOB data we cannot perform any special
checks on the confirm value. This patch updates the check after having
received the public key to only perform the verification if we have
remote OOB data present.

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

index b8a6ce840603c4bdc6437ab6d9a8c11e443ef687..de53ba1905fe76cf7c07106e9cd8c13050ca34e7 100644 (file)
@@ -2562,7 +2562,7 @@ static int smp_cmd_public_key(struct l2cap_conn *conn, struct sk_buff *skb)
                return sc_passkey_round(smp, SMP_CMD_PUBLIC_KEY);
        }
 
-       if (smp->method == REQ_OOB) {
+       if (test_bit(SMP_FLAG_REMOTE_OOB, &smp->flags)) {
                err = smp_f4(smp->tfm_cmac, smp->remote_pk, smp->remote_pk,
                             smp->rr, 0, cfm.confirm_val);
                if (err)
@@ -2570,7 +2570,9 @@ static int smp_cmd_public_key(struct l2cap_conn *conn, struct sk_buff *skb)
 
                if (memcmp(cfm.confirm_val, smp->pcnf, 16))
                        return SMP_CONFIRM_FAILED;
+       }
 
+       if (smp->method == REQ_OOB) {
                if (hcon->out)
                        smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM,
                                     sizeof(smp->prnd), smp->prnd);