Bluetooth: btusb: fix non-atomic allocation in completion handler
authorJohan Hovold <johan@kernel.org>
Thu, 28 Nov 2019 18:24:27 +0000 (19:24 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 1 Feb 2020 09:34:30 +0000 (09:34 +0000)
commit 22cc6b7a1dbb58da4afc539d9b7d470b23a25eea upstream.

USB completion handlers are called in atomic context and must
specifically not allocate memory using GFP_KERNEL.

Fixes: a1c49c434e15 ("Bluetooth: btusb: Add protocol support for MediaTek MT7668U USB devices")
Cc: stable <stable@vger.kernel.org> # 5.3
Cc: Sean Wang <sean.wang@mediatek.com>
Signed-off-by: Johan Hovold <johan@kernel.org>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/bluetooth/btusb.c

index 04cf767..4e7ef35 100644 (file)
@@ -2585,7 +2585,7 @@ static void btusb_mtk_wmt_recv(struct urb *urb)
                 * and being processed the events from there then.
                 */
                if (test_bit(BTUSB_TX_WAIT_VND_EVT, &data->flags)) {
-                       data->evt_skb = skb_clone(skb, GFP_KERNEL);
+                       data->evt_skb = skb_clone(skb, GFP_ATOMIC);
                        if (!data->evt_skb)
                                goto err_out;
                }