|
@@ -268,16 +268,26 @@ static inline int l2cap_check_security(struct sock *sk)
|
|
|
struct l2cap_conn *conn = l2cap_pi(sk)->conn;
|
|
|
__u8 auth_type;
|
|
|
|
|
|
- switch (l2cap_pi(sk)->sec_level) {
|
|
|
- case BT_SECURITY_HIGH:
|
|
|
- auth_type = HCI_AT_GENERAL_BONDING_MITM;
|
|
|
- break;
|
|
|
- case BT_SECURITY_MEDIUM:
|
|
|
- auth_type = HCI_AT_GENERAL_BONDING;
|
|
|
- break;
|
|
|
- default:
|
|
|
- auth_type = HCI_AT_NO_BONDING;
|
|
|
- break;
|
|
|
+ if (l2cap_pi(sk)->psm == cpu_to_le16(0x0001)) {
|
|
|
+ if (l2cap_pi(sk)->sec_level == BT_SECURITY_HIGH)
|
|
|
+ auth_type = HCI_AT_NO_BONDING_MITM;
|
|
|
+ else
|
|
|
+ auth_type = HCI_AT_NO_BONDING;
|
|
|
+
|
|
|
+ if (l2cap_pi(sk)->sec_level == BT_SECURITY_LOW)
|
|
|
+ l2cap_pi(sk)->sec_level = BT_SECURITY_SDP;
|
|
|
+ } else {
|
|
|
+ switch (l2cap_pi(sk)->sec_level) {
|
|
|
+ case BT_SECURITY_HIGH:
|
|
|
+ auth_type = HCI_AT_GENERAL_BONDING_MITM;
|
|
|
+ break;
|
|
|
+ case BT_SECURITY_MEDIUM:
|
|
|
+ auth_type = HCI_AT_GENERAL_BONDING;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ auth_type = HCI_AT_NO_BONDING;
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
return hci_conn_security(conn->hcon, l2cap_pi(sk)->sec_level,
|