Skip to content

Commit

Permalink
Bluetooth: Update smp_confirm to return a response code
Browse files Browse the repository at this point in the history
Now that smp_confirm() is called "inline" we can have it return a
response code and have the sending of it be done in the shared place for
command handlers. One exception is when we're entering smp.c from mgmt.c
when user space responds to authentication, in which case we still need
our own code to call smp_failure().

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
  • Loading branch information
Johan Hedberg authored and Marcel Holtmann committed May 20, 2014
1 parent 861580a commit 1cc6114
Showing 1 changed file with 11 additions and 14 deletions.
25 changes: 11 additions & 14 deletions net/bluetooth/smp.c
Original file line number Diff line number Diff line change
Expand Up @@ -467,14 +467,13 @@ static int tk_request(struct l2cap_conn *conn, u8 remote_oob, u8 auth,
return ret;
}

static void smp_confirm(struct smp_chan *smp)
static u8 smp_confirm(struct smp_chan *smp)
{
struct l2cap_conn *conn = smp->conn;
struct hci_dev *hdev = conn->hcon->hdev;
struct crypto_blkcipher *tfm = hdev->tfm_aes;
struct smp_cmd_pairing_confirm cp;
int ret;
u8 reason;

BT_DBG("conn %p", conn);

Expand All @@ -488,19 +487,14 @@ static void smp_confirm(struct smp_chan *smp)

hci_dev_unlock(hdev);

if (ret) {
reason = SMP_UNSPECIFIED;
goto error;
}
if (ret)
return SMP_UNSPECIFIED;

clear_bit(SMP_FLAG_CFM_PENDING, &smp->flags);

smp_send_cmd(smp->conn, SMP_CMD_PAIRING_CONFIRM, sizeof(cp), &cp);

return;

error:
smp_failure(conn, reason);
return 0;
}

static u8 smp_random(struct smp_chan *smp)
Expand Down Expand Up @@ -657,8 +651,11 @@ int smp_user_confirm_reply(struct hci_conn *hcon, u16 mgmt_op, __le32 passkey)
}

/* If it is our turn to send Pairing Confirm, do so now */
if (test_bit(SMP_FLAG_CFM_PENDING, &smp->flags))
smp_confirm(smp);
if (test_bit(SMP_FLAG_CFM_PENDING, &smp->flags)) {
u8 rsp = smp_confirm(smp);
if (rsp)
smp_failure(conn, rsp);
}

return 0;
}
Expand Down Expand Up @@ -765,7 +762,7 @@ static u8 smp_cmd_pairing_rsp(struct l2cap_conn *conn, struct sk_buff *skb)

/* Can't compose response until we have been confirmed */
if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
smp_confirm(smp);
return smp_confirm(smp);

return 0;
}
Expand All @@ -786,7 +783,7 @@ static u8 smp_cmd_pairing_confirm(struct l2cap_conn *conn, struct sk_buff *skb)
smp_send_cmd(conn, SMP_CMD_PAIRING_RANDOM, sizeof(smp->prnd),
smp->prnd);
else if (test_bit(SMP_FLAG_TK_VALID, &smp->flags))
smp_confirm(smp);
return smp_confirm(smp);
else
set_bit(SMP_FLAG_CFM_PENDING, &smp->flags);

Expand Down

0 comments on commit 1cc6114

Please sign in to comment.