浏览代码

Bluetooth: Set authentication requirement before requesting it

The authentication requirement got only updated when the security level
increased. This is a wrong behavior. The authentication requirement is
read by the Bluetooth daemon to make proper decisions when handling the
IO capabilities exchange. So set the value that is currently expected by
the higher layers like L2CAP and RFCOMM.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Marcel Holtmann 16 年之前
父节点
当前提交
96a3183322
共有 1 个文件被更改,包括 4 次插入6 次删除
  1. 4 6
      net/bluetooth/hci_conn.c

+ 4 - 6
net/bluetooth/hci_conn.c

@@ -397,12 +397,13 @@ static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
 {
 	BT_DBG("conn %p", conn);
 
-	if (sec_level > conn->sec_level) {
+	if (sec_level > conn->sec_level)
 		conn->sec_level = sec_level;
-		conn->auth_type = auth_type;
-	} else if (conn->link_mode & HCI_LM_AUTH)
+	else if (conn->link_mode & HCI_LM_AUTH)
 		return 1;
 
+	conn->auth_type = auth_type;
+
 	if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
 		struct hci_cp_auth_requested cp;
 		cp.handle = cpu_to_le16(conn->handle);
@@ -418,9 +419,6 @@ int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
 {
 	BT_DBG("conn %p", conn);
 
-	if (conn->auth_type == 0xff)
-		conn->auth_type = auth_type;
-
 	if (sec_level == BT_SECURITY_SDP)
 		return 1;