mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-05 08:46:43 +07:00
Bluetooth: Allow remote OOB data to only provide P-192 or P-256 values
In case the remote only provided P-192 or P-256 data for OOB pairing, then make sure that the data value pointers are correctly set. That way the core can provide correct information when remote OOB data present information have to be communicated. Signed-off-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
This commit is contained in:
parent
4775a4ea14
commit
41bcfd50d5
@ -3672,7 +3672,7 @@ static int add_remote_oob_data(struct sock *sk, struct hci_dev *hdev,
|
|||||||
status, &cp->addr, sizeof(cp->addr));
|
status, &cp->addr, sizeof(cp->addr));
|
||||||
} else if (len == MGMT_ADD_REMOTE_OOB_EXT_DATA_SIZE) {
|
} else if (len == MGMT_ADD_REMOTE_OOB_EXT_DATA_SIZE) {
|
||||||
struct mgmt_cp_add_remote_oob_ext_data *cp = data;
|
struct mgmt_cp_add_remote_oob_ext_data *cp = data;
|
||||||
u8 *rand192, *hash192;
|
u8 *rand192, *hash192, *rand256, *hash256;
|
||||||
u8 status;
|
u8 status;
|
||||||
|
|
||||||
if (bdaddr_type_is_le(cp->addr.type)) {
|
if (bdaddr_type_is_le(cp->addr.type)) {
|
||||||
@ -3691,13 +3691,34 @@ static int add_remote_oob_data(struct sock *sk, struct hci_dev *hdev,
|
|||||||
rand192 = NULL;
|
rand192 = NULL;
|
||||||
hash192 = NULL;
|
hash192 = NULL;
|
||||||
} else {
|
} else {
|
||||||
rand192 = cp->rand192;
|
/* In case one of the P-192 values is set to zero,
|
||||||
hash192 = cp->hash192;
|
* then just disable OOB data for P-192.
|
||||||
|
*/
|
||||||
|
if (!memcmp(cp->rand192, ZERO_KEY, 16) ||
|
||||||
|
!memcmp(cp->hash192, ZERO_KEY, 16)) {
|
||||||
|
rand192 = NULL;
|
||||||
|
hash192 = NULL;
|
||||||
|
} else {
|
||||||
|
rand192 = cp->rand192;
|
||||||
|
hash192 = cp->hash192;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* In case one of the P-256 values is set to zero, then just
|
||||||
|
* disable OOB data for P-256.
|
||||||
|
*/
|
||||||
|
if (!memcmp(cp->rand256, ZERO_KEY, 16) ||
|
||||||
|
!memcmp(cp->hash256, ZERO_KEY, 16)) {
|
||||||
|
rand256 = NULL;
|
||||||
|
hash256 = NULL;
|
||||||
|
} else {
|
||||||
|
rand256 = cp->rand256;
|
||||||
|
hash256 = cp->hash256;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = hci_add_remote_oob_data(hdev, &cp->addr.bdaddr,
|
err = hci_add_remote_oob_data(hdev, &cp->addr.bdaddr,
|
||||||
cp->addr.type, hash192, rand192,
|
cp->addr.type, hash192, rand192,
|
||||||
cp->hash256, cp->rand256);
|
hash256, rand256);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
status = MGMT_STATUS_FAILED;
|
status = MGMT_STATUS_FAILED;
|
||||||
else
|
else
|
||||||
|
Loading…
Reference in New Issue
Block a user