aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/net/bluetooth/hci_core.h4
-rw-r--r--net/bluetooth/hci_sock.c1
-rw-r--r--net/bluetooth/mgmt.c18
3 files changed, 8 insertions, 15 deletions
diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
index facd7ed32b74..25cb0a15b579 100644
--- a/include/net/bluetooth/hci_core.h
+++ b/include/net/bluetooth/hci_core.h
@@ -1034,16 +1034,12 @@ int mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, u8 persistent);
1034/* HCI info for socket */ 1034/* HCI info for socket */
1035#define hci_pi(sk) ((struct hci_pinfo *) sk) 1035#define hci_pi(sk) ((struct hci_pinfo *) sk)
1036 1036
1037/* HCI socket flags */
1038#define HCI_PI_MGMT_INIT 0
1039
1040struct hci_pinfo { 1037struct hci_pinfo {
1041 struct bt_sock bt; 1038 struct bt_sock bt;
1042 struct hci_dev *hdev; 1039 struct hci_dev *hdev;
1043 struct hci_filter filter; 1040 struct hci_filter filter;
1044 __u32 cmsg_mask; 1041 __u32 cmsg_mask;
1045 unsigned short channel; 1042 unsigned short channel;
1046 unsigned long flags;
1047}; 1043};
1048 1044
1049/* HCI security filter */ 1045/* HCI security filter */
diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c
index 8a814bca00d7..63afd234283e 100644
--- a/net/bluetooth/hci_sock.c
+++ b/net/bluetooth/hci_sock.c
@@ -659,7 +659,6 @@ static int hci_sock_bind(struct socket *sock, struct sockaddr *addr, int addr_le
659 goto done; 659 goto done;
660 } 660 }
661 661
662 set_bit(HCI_PI_MGMT_INIT, &hci_pi(sk)->flags);
663 break; 662 break;
664 663
665 case HCI_CHANNEL_MONITOR: 664 case HCI_CHANNEL_MONITOR:
diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index fa9a58964278..4b1efedc18c5 100644
--- a/net/bluetooth/mgmt.c
+++ b/net/bluetooth/mgmt.c
@@ -615,19 +615,17 @@ static void service_cache_off(struct work_struct *work)
615 615
616static void mgmt_init_hdev(struct sock *sk, struct hci_dev *hdev) 616static void mgmt_init_hdev(struct sock *sk, struct hci_dev *hdev)
617{ 617{
618 if (!test_and_clear_bit(HCI_PI_MGMT_INIT, &hci_pi(sk)->flags)) 618 if (test_and_set_bit(HCI_MGMT, &hdev->dev_flags))
619 return; 619 return;
620 620
621 if (!test_and_set_bit(HCI_MGMT, &hdev->dev_flags)) { 621 INIT_DELAYED_WORK(&hdev->service_cache, service_cache_off);
622 INIT_DELAYED_WORK(&hdev->service_cache, service_cache_off);
623 622
624 /* Non-mgmt controlled devices get this bit set 623 /* Non-mgmt controlled devices get this bit set
625 * implicitly so that pairing works for them, however 624 * implicitly so that pairing works for them, however
626 * for mgmt we require user-space to explicitly enable 625 * for mgmt we require user-space to explicitly enable
627 * it 626 * it
628 */ 627 */
629 clear_bit(HCI_PAIRABLE, &hdev->dev_flags); 628 clear_bit(HCI_PAIRABLE, &hdev->dev_flags);
630 }
631} 629}
632 630
633static int read_controller_info(struct sock *sk, struct hci_dev *hdev, 631static int read_controller_info(struct sock *sk, struct hci_dev *hdev,