Loading drivers/bluetooth/btmrvl_sdio.c +1 −0 Original line number Diff line number Diff line Loading @@ -808,6 +808,7 @@ static int btmrvl_sdio_host_to_card(struct btmrvl_private *priv, exit: sdio_release_host(card->func); kfree(tmpbuf); return ret; } Loading net/bluetooth/hci_conn.c +3 −0 Original line number Diff line number Diff line Loading @@ -377,6 +377,9 @@ struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst, __u8 if (acl->state == BT_CONNECTED && (sco->state == BT_OPEN || sco->state == BT_CLOSED)) { acl->power_save = 1; hci_conn_enter_active_mode(acl); if (lmp_esco_capable(hdev)) hci_setup_sync(sco, acl->handle); else Loading net/bluetooth/hci_event.c +1 −0 Original line number Diff line number Diff line Loading @@ -1699,6 +1699,7 @@ static inline void hci_sync_conn_complete_evt(struct hci_dev *hdev, struct sk_bu break; case 0x1c: /* SCO interval rejected */ case 0x1a: /* Unsupported Remote Feature */ case 0x1f: /* Unspecified error */ if (conn->out && conn->attempt < 2) { conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) | Loading net/bluetooth/hidp/core.c +24 −25 Original line number Diff line number Diff line Loading @@ -703,29 +703,9 @@ static void hidp_close(struct hid_device *hid) static int hidp_parse(struct hid_device *hid) { struct hidp_session *session = hid->driver_data; struct hidp_connadd_req *req = session->req; unsigned char *buf; int ret; buf = kmalloc(req->rd_size, GFP_KERNEL); if (!buf) return -ENOMEM; if (copy_from_user(buf, req->rd_data, req->rd_size)) { kfree(buf); return -EFAULT; } ret = hid_parse_report(session->hid, buf, req->rd_size); kfree(buf); if (ret) return ret; session->req = NULL; return 0; return hid_parse_report(session->hid, session->rd_data, session->rd_size); } static int hidp_start(struct hid_device *hid) Loading Loading @@ -770,12 +750,24 @@ static int hidp_setup_hid(struct hidp_session *session, bdaddr_t src, dst; int err; session->rd_data = kzalloc(req->rd_size, GFP_KERNEL); if (!session->rd_data) return -ENOMEM; if (copy_from_user(session->rd_data, req->rd_data, req->rd_size)) { err = -EFAULT; goto fault; } session->rd_size = req->rd_size; hid = hid_allocate_device(); if (IS_ERR(hid)) return PTR_ERR(hid); if (IS_ERR(hid)) { err = PTR_ERR(hid); goto fault; } session->hid = hid; session->req = req; hid->driver_data = session; baswap(&src, &bt_sk(session->ctrl_sock->sk)->src); Loading Loading @@ -806,6 +798,10 @@ static int hidp_setup_hid(struct hidp_session *session, hid_destroy_device(hid); session->hid = NULL; fault: kfree(session->rd_data); session->rd_data = NULL; return err; } Loading Loading @@ -900,6 +896,9 @@ int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock, session->hid = NULL; } kfree(session->rd_data); session->rd_data = NULL; purge: skb_queue_purge(&session->ctrl_transmit); skb_queue_purge(&session->intr_transmit); Loading net/bluetooth/hidp/hidp.h +3 −1 Original line number Diff line number Diff line Loading @@ -154,7 +154,9 @@ struct hidp_session { struct sk_buff_head ctrl_transmit; struct sk_buff_head intr_transmit; struct hidp_connadd_req *req; /* Report descriptor */ __u8 *rd_data; uint rd_size; }; static inline void hidp_schedule(struct hidp_session *session) Loading Loading
drivers/bluetooth/btmrvl_sdio.c +1 −0 Original line number Diff line number Diff line Loading @@ -808,6 +808,7 @@ static int btmrvl_sdio_host_to_card(struct btmrvl_private *priv, exit: sdio_release_host(card->func); kfree(tmpbuf); return ret; } Loading
net/bluetooth/hci_conn.c +3 −0 Original line number Diff line number Diff line Loading @@ -377,6 +377,9 @@ struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst, __u8 if (acl->state == BT_CONNECTED && (sco->state == BT_OPEN || sco->state == BT_CLOSED)) { acl->power_save = 1; hci_conn_enter_active_mode(acl); if (lmp_esco_capable(hdev)) hci_setup_sync(sco, acl->handle); else Loading
net/bluetooth/hci_event.c +1 −0 Original line number Diff line number Diff line Loading @@ -1699,6 +1699,7 @@ static inline void hci_sync_conn_complete_evt(struct hci_dev *hdev, struct sk_bu break; case 0x1c: /* SCO interval rejected */ case 0x1a: /* Unsupported Remote Feature */ case 0x1f: /* Unspecified error */ if (conn->out && conn->attempt < 2) { conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) | Loading
net/bluetooth/hidp/core.c +24 −25 Original line number Diff line number Diff line Loading @@ -703,29 +703,9 @@ static void hidp_close(struct hid_device *hid) static int hidp_parse(struct hid_device *hid) { struct hidp_session *session = hid->driver_data; struct hidp_connadd_req *req = session->req; unsigned char *buf; int ret; buf = kmalloc(req->rd_size, GFP_KERNEL); if (!buf) return -ENOMEM; if (copy_from_user(buf, req->rd_data, req->rd_size)) { kfree(buf); return -EFAULT; } ret = hid_parse_report(session->hid, buf, req->rd_size); kfree(buf); if (ret) return ret; session->req = NULL; return 0; return hid_parse_report(session->hid, session->rd_data, session->rd_size); } static int hidp_start(struct hid_device *hid) Loading Loading @@ -770,12 +750,24 @@ static int hidp_setup_hid(struct hidp_session *session, bdaddr_t src, dst; int err; session->rd_data = kzalloc(req->rd_size, GFP_KERNEL); if (!session->rd_data) return -ENOMEM; if (copy_from_user(session->rd_data, req->rd_data, req->rd_size)) { err = -EFAULT; goto fault; } session->rd_size = req->rd_size; hid = hid_allocate_device(); if (IS_ERR(hid)) return PTR_ERR(hid); if (IS_ERR(hid)) { err = PTR_ERR(hid); goto fault; } session->hid = hid; session->req = req; hid->driver_data = session; baswap(&src, &bt_sk(session->ctrl_sock->sk)->src); Loading Loading @@ -806,6 +798,10 @@ static int hidp_setup_hid(struct hidp_session *session, hid_destroy_device(hid); session->hid = NULL; fault: kfree(session->rd_data); session->rd_data = NULL; return err; } Loading Loading @@ -900,6 +896,9 @@ int hidp_add_connection(struct hidp_connadd_req *req, struct socket *ctrl_sock, session->hid = NULL; } kfree(session->rd_data); session->rd_data = NULL; purge: skb_queue_purge(&session->ctrl_transmit); skb_queue_purge(&session->intr_transmit); Loading
net/bluetooth/hidp/hidp.h +3 −1 Original line number Diff line number Diff line Loading @@ -154,7 +154,9 @@ struct hidp_session { struct sk_buff_head ctrl_transmit; struct sk_buff_head intr_transmit; struct hidp_connadd_req *req; /* Report descriptor */ __u8 *rd_data; uint rd_size; }; static inline void hidp_schedule(struct hidp_session *session) Loading