skb = bt_skb_alloc(HCI_WMT_MAX_EVENT_SIZE, GFP_ATOMIC);
                if (!skb) {
                        hdev->stat.err_rx++;
+                       kfree(urb->setup_packet);
                        return;
                }
 
                        data->evt_skb = skb_clone(skb, GFP_ATOMIC);
                        if (!data->evt_skb) {
                                kfree_skb(skb);
+                               kfree(urb->setup_packet);
                                return;
                        }
                }
                if (err < 0) {
                        kfree_skb(data->evt_skb);
                        data->evt_skb = NULL;
+                       kfree(urb->setup_packet);
                        return;
                }
 
                        wake_up_bit(&data->flags,
                                    BTUSB_TX_WAIT_VND_EVT);
                }
+               kfree(urb->setup_packet);
                return;
        } else if (urb->status == -ENOENT) {
                /* Avoid suspend failed when usb_kill_urb */
        usb_anchor_urb(urb, &data->ctrl_anchor);
        err = usb_submit_urb(urb, GFP_ATOMIC);
        if (err < 0) {
+               kfree(urb->setup_packet);
                /* -EPERM: urb is being killed;
                 * -ENODEV: device got disconnected
                 */