|
@@ -3890,24 +3890,28 @@ static u8 bredr_oob_data_present(struct hci_conn *conn)
|
|
|
if (!data)
|
|
|
return 0x00;
|
|
|
|
|
|
- /* When Secure Connections Only mode is enabled, then the P-256
|
|
|
- * values are required. If they are not available, then do not
|
|
|
- * declare that OOB data is present.
|
|
|
- */
|
|
|
- if (bredr_sc_enabled(hdev) &&
|
|
|
- test_bit(HCI_SC_ONLY, &hdev->dev_flags) &&
|
|
|
- (!memcmp(data->rand256, ZERO_KEY, 16) ||
|
|
|
- !memcmp(data->hash256, ZERO_KEY, 16)))
|
|
|
- return 0x00;
|
|
|
-
|
|
|
if (conn->out || test_bit(HCI_CONN_REMOTE_OOB, &conn->flags)) {
|
|
|
- /* When Secure Connections has been enabled, then just
|
|
|
- * return the present value stored with the OOB data. It
|
|
|
- * will contain the right information about which data
|
|
|
- * is present.
|
|
|
- */
|
|
|
- if (bredr_sc_enabled(hdev))
|
|
|
- return data->present;
|
|
|
+ if (bredr_sc_enabled(hdev)) {
|
|
|
+ /* When Secure Connections is enabled, then just
|
|
|
+ * return the present value stored with the OOB
|
|
|
+ * data. The stored value contains the right present
|
|
|
+ * information. However it can only be trusted when
|
|
|
+ * not in Secure Connection Only mode.
|
|
|
+ */
|
|
|
+ if (!test_bit(HCI_SC_ONLY, &hdev->dev_flags))
|
|
|
+ return data->present;
|
|
|
+
|
|
|
+ /* When Secure Connections Only mode is enabled, then
|
|
|
+ * the P-256 values are required. If they are not
|
|
|
+ * available, then do not declare that OOB data is
|
|
|
+ * present.
|
|
|
+ */
|
|
|
+ if (!memcmp(data->rand256, ZERO_KEY, 16) ||
|
|
|
+ !memcmp(data->hash256, ZERO_KEY, 16))
|
|
|
+ return 0x00;
|
|
|
+
|
|
|
+ return 0x02;
|
|
|
+ }
|
|
|
|
|
|
/* When Secure Connections is not enabled or actually
|
|
|
* not supported by the hardware, then check that if
|