diff options
author | Mikel Astiz <mikel.astiz@bmw-carit.de> | 2014-04-08 08:21:32 -0400 |
---|---|---|
committer | Johan Hedberg <johan.hedberg@intel.com> | 2014-04-11 13:33:08 -0400 |
commit | 6fd6b915bd94cd81611254f318fa3bb769cc4afe (patch) | |
tree | 4a58b3ae03e2cdfcc6f1740ebf78b52112d53785 /net/bluetooth/hci_event.c | |
parent | b7f94c880839e85917369fe9097f861008b8c00e (diff) |
Bluetooth: Refactor code for outgoing dedicated bonding
Do not always set the MITM protection requirement by default in the
field conn->auth_type, since this will be added later in
hci_io_capa_request_evt(), as part of the requirements specified in
HCI_OP_IO_CAPABILITY_REPLY.
This avoids a hackish exception for the auto-reject case, but doesn't
change the behavior of the code at all.
Signed-off-by: Mikel Astiz <mikel.astiz@bmw-carit.de>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Diffstat (limited to 'net/bluetooth/hci_event.c')
-rw-r--r-- | net/bluetooth/hci_event.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c index 08016683e8aa..2c097322b126 100644 --- a/net/bluetooth/hci_event.c +++ b/net/bluetooth/hci_event.c | |||
@@ -3471,6 +3471,11 @@ static void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb) | |||
3471 | /* If we are initiators, there is no remote information yet */ | 3471 | /* If we are initiators, there is no remote information yet */ |
3472 | if (conn->remote_auth == 0xff) { | 3472 | if (conn->remote_auth == 0xff) { |
3473 | cp.authentication = conn->auth_type; | 3473 | cp.authentication = conn->auth_type; |
3474 | |||
3475 | /* Use MITM protection for outgoing dedicated bonding */ | ||
3476 | if (conn->io_capability != HCI_IO_NO_INPUT_OUTPUT && | ||
3477 | cp.authentication == HCI_AT_DEDICATED_BONDING) | ||
3478 | cp.authentication |= 0x01; | ||
3474 | } else { | 3479 | } else { |
3475 | conn->auth_type = hci_get_auth_req(conn); | 3480 | conn->auth_type = hci_get_auth_req(conn); |
3476 | cp.authentication = conn->auth_type; | 3481 | cp.authentication = conn->auth_type; |
@@ -3542,12 +3547,9 @@ static void hci_user_confirm_request_evt(struct hci_dev *hdev, | |||
3542 | rem_mitm = (conn->remote_auth & 0x01); | 3547 | rem_mitm = (conn->remote_auth & 0x01); |
3543 | 3548 | ||
3544 | /* If we require MITM but the remote device can't provide that | 3549 | /* If we require MITM but the remote device can't provide that |
3545 | * (it has NoInputNoOutput) then reject the confirmation | 3550 | * (it has NoInputNoOutput) then reject the confirmation request |
3546 | * request. The only exception is when we're dedicated bonding | 3551 | */ |
3547 | * initiators (connect_cfm_cb set) since then we always have the MITM | 3552 | if (loc_mitm && conn->remote_cap == HCI_IO_NO_INPUT_OUTPUT) { |
3548 | * bit set. */ | ||
3549 | if (!conn->connect_cfm_cb && loc_mitm && | ||
3550 | conn->remote_cap == HCI_IO_NO_INPUT_OUTPUT) { | ||
3551 | BT_DBG("Rejecting request: remote device can't provide MITM"); | 3553 | BT_DBG("Rejecting request: remote device can't provide MITM"); |
3552 | hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_NEG_REPLY, | 3554 | hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_NEG_REPLY, |
3553 | sizeof(ev->bdaddr), &ev->bdaddr); | 3555 | sizeof(ev->bdaddr), &ev->bdaddr); |