aboutsummaryrefslogtreecommitdiffstats
path: root/net/bluetooth/hci_event.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2015-01-31 02:20:56 -0500
committerMarcel Holtmann <marcel@holtmann.org>2015-01-31 15:26:12 -0500
commit659c7fb08463b3dcf6aebb4daa0c5463289ccb97 (patch)
tree38bf0a926f2ae378a341064f68a4192ac9e10bcd /net/bluetooth/hci_event.c
parentf7697b1602d13ef80779caf23d13fa1511193144 (diff)
Bluetooth: Fix OOB data present value for BR/EDR Secure Connections
When BR/EDR Secure Connections has been enabled, the OOB data present value can take 2 additional values. The host has to clearly provide details about if P-192 OOB data, P-256 OOB data or a combination of P-192 and P-256 OOB data is present. In case BR/EDR Secure Connections is not enabled or not supported, then check that P-192 OOB data is actually present and return the correct value based on that. Signed-off-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
Diffstat (limited to 'net/bluetooth/hci_event.c')
-rw-r--r--net/bluetooth/hci_event.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index 055625b7368f..af181f455f6f 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -3881,8 +3881,25 @@ static u8 bredr_oob_data_present(struct hci_conn *conn)
3881 !memcmp(data->hash256, ZERO_KEY, 16))) 3881 !memcmp(data->hash256, ZERO_KEY, 16)))
3882 return 0x00; 3882 return 0x00;
3883 3883
3884 if (conn->out || test_bit(HCI_CONN_REMOTE_OOB, &conn->flags)) 3884 if (conn->out || test_bit(HCI_CONN_REMOTE_OOB, &conn->flags)) {
3885 /* When Secure Connections has been enabled, then just
3886 * return the present value stored with the OOB data. It
3887 * will contain the right information about which data
3888 * is present.
3889 */
3890 if (bredr_sc_enabled(hdev))
3891 return data->present;
3892
3893 /* When Secure Connections is not enabled or actually
3894 * not supported by the hardware, then check that if
3895 * P-192 data values are present.
3896 */
3897 if (!memcmp(data->rand192, ZERO_KEY, 16) ||
3898 !memcmp(data->hash192, ZERO_KEY, 16))
3899 return 0x00;
3900
3885 return 0x01; 3901 return 0x01;
3902 }
3886 3903
3887 return 0x00; 3904 return 0x00;
3888} 3905}