patch-2.4.26 linux-2.4.26/net/bluetooth/hci_core.c
Next file: linux-2.4.26/net/bluetooth/l2cap.c
Previous file: linux-2.4.26/net/bluetooth/hci_conn.c
Back to the patch index
Back to the overall index
- Lines: 54
- Date:
2004-04-14 06:05:41.000000000 -0700
- Orig file:
linux-2.4.25/net/bluetooth/hci_core.c
- Orig date:
2004-02-18 05:36:32.000000000 -0800
diff -urN linux-2.4.25/net/bluetooth/hci_core.c linux-2.4.26/net/bluetooth/hci_core.c
@@ -218,6 +218,10 @@
/* Mandatory initialization */
+ /* Reset */
+ if (test_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks))
+ hci_send_cmd(hdev, OGF_HOST_CTL, OCF_RESET, 0, NULL);
+
/* Read Local Supported Features */
hci_send_cmd(hdev, OGF_INFO_PARAM, OCF_READ_LOCAL_FEATURES, 0, NULL);
@@ -712,22 +716,20 @@
struct hci_dev_list_req *dl;
struct hci_dev_req *dr;
struct list_head *p;
- int n = 0, size;
+ int n = 0, size, err;
__u16 dev_num;
if (get_user(dev_num, (__u16 *) arg))
return -EFAULT;
- if (!dev_num)
+ if (!dev_num || dev_num > (PAGE_SIZE * 2) / sizeof(*dr))
return -EINVAL;
-
- size = dev_num * sizeof(*dr) + sizeof(*dl);
- if (verify_area(VERIFY_WRITE, (void *) arg, size))
- return -EFAULT;
+ size = sizeof(*dl) + dev_num * sizeof(*dr);
if (!(dl = kmalloc(size, GFP_KERNEL)))
return -ENOMEM;
+
dr = dl->dev_req;
read_lock_bh(&hdev_list_lock);
@@ -742,12 +744,12 @@
read_unlock_bh(&hdev_list_lock);
dl->dev_num = n;
- size = n * sizeof(*dr) + sizeof(*dl);
+ size = sizeof(*dl) + n * sizeof(*dr);
- copy_to_user((void *) arg, dl, size);
+ err = copy_to_user((void *) arg, dl, size);
kfree(dl);
- return 0;
+ return err ? -EFAULT : 0;
}
int hci_get_dev_info(unsigned long arg)
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)