On Fri, Jul 05, 2013 at 10:37:07AM +0800, Yang Bai wrote: > The return value of btusb_setup_intel is compared with 0. Code as: > > drivers/bluetooth/btusb.c: > static int btusb_probe(struct usb_interface *intf, > const struct usb_device_id *id) > if (id->driver_info & BTUSB_INTEL) > hdev->setup = btusb_setup_intel; > > net/bluetooth/hci_core.c: > int hci_dev_open(__u16 dev) > if (hdev->setup && test_bit(HCI_SETUP, &hdev->dev_flags)) > ret = hdev->setup(hdev); > > if (!ret) { Yes, for btusb_setup_intel(), the return value is compared with number "0", doesn't break the judgement. But it still overflows stack without this fix. > On Thu, Jul 4, 2013 at 8:43 PM, Adam Lee <adam.lee@xxxxxxxxxxxxx> wrote: > > PTR_ERR() returns a long type value, but btusb_setup_intel() and > btusb_setup_intel_patching() should return an int type value. > > This bug makes the judgement "if (ret < 0)" not working on x86_64 > architecture systems, leading to failure as below, even panic. -- Regards, Adam Lee Hardware Enablement -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html