X-Git-Url: https://git.kernel.dk/?a=blobdiff_plain;f=net%2Fbluetooth%2Fhci_sock.c;h=1a35d343e08a593f91cc71fce52306a50d991c4b;hb=af652c26f5f0eceb6d8cb97eb9b86fba6f1f3b85;hp=84e6c93a044ad50e934fe8aaa008b4e48354d0fc;hpb=90ddc4f0470427df306f308ad03db6b6b21644b8;p=linux-2.6-block.git diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c index 84e6c93a044a..1a35d343e08a 100644 --- a/net/bluetooth/hci_sock.c +++ b/net/bluetooth/hci_sock.c @@ -24,10 +24,10 @@ /* Bluetooth HCI sockets. */ -#include #include #include +#include #include #include #include @@ -142,13 +142,15 @@ void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb) static int hci_sock_release(struct socket *sock) { struct sock *sk = sock->sk; - struct hci_dev *hdev = hci_pi(sk)->hdev; + struct hci_dev *hdev; BT_DBG("sock %p sk %p", sock, sk); if (!sk) return 0; + hdev = hci_pi(sk)->hdev; + bt_sock_unlink(&hci_sk_list, sk); if (hdev) { @@ -310,14 +312,18 @@ static int hci_sock_getname(struct socket *sock, struct sockaddr *addr, int *add { struct sockaddr_hci *haddr = (struct sockaddr_hci *) addr; struct sock *sk = sock->sk; + struct hci_dev *hdev = hci_pi(sk)->hdev; BT_DBG("sock %p sk %p", sock, sk); + if (!hdev) + return -EBADFD; + lock_sock(sk); *addr_len = sizeof(*haddr); haddr->hci_family = AF_BLUETOOTH; - haddr->hci_dev = hci_pi(sk)->hdev->id; + haddr->hci_dev = hdev->id; release_sock(sk); return 0;