]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 8 Jun 2021 08:34:06 +0000 (10:34 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 8 Jun 2021 08:34:06 +0000 (10:34 +0200)
added patches:
bluetooth-fix-the-erroneous-flush_work-order.patch

queue-5.4/bluetooth-fix-the-erroneous-flush_work-order.patch [new file with mode: 0644]
queue-5.4/series

diff --git a/queue-5.4/bluetooth-fix-the-erroneous-flush_work-order.patch b/queue-5.4/bluetooth-fix-the-erroneous-flush_work-order.patch
new file mode 100644 (file)
index 0000000..8135f3c
--- /dev/null
@@ -0,0 +1,53 @@
+From 6a137caec23aeb9e036cdfd8a46dd8a366460e5d Mon Sep 17 00:00:00 2001
+From: Lin Ma <linma@zju.edu.cn>
+Date: Tue, 25 May 2021 14:39:02 +0200
+Subject: Bluetooth: fix the erroneous flush_work() order
+
+From: Lin Ma <linma@zju.edu.cn>
+
+commit 6a137caec23aeb9e036cdfd8a46dd8a366460e5d upstream.
+
+In the cleanup routine for failed initialization of HCI device,
+the flush_work(&hdev->rx_work) need to be finished before the
+flush_work(&hdev->cmd_work). Otherwise, the hci_rx_work() can
+possibly invoke new cmd_work and cause a bug, like double free,
+in late processings.
+
+This was assigned CVE-2021-3564.
+
+This patch reorder the flush_work() to fix this bug.
+
+Cc: Marcel Holtmann <marcel@holtmann.org>
+Cc: Johan Hedberg <johan.hedberg@gmail.com>
+Cc: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
+Cc: "David S. Miller" <davem@davemloft.net>
+Cc: Jakub Kicinski <kuba@kernel.org>
+Cc: linux-bluetooth@vger.kernel.org
+Cc: netdev@vger.kernel.org
+Cc: linux-kernel@vger.kernel.org
+Signed-off-by: Lin Ma <linma@zju.edu.cn>
+Signed-off-by: Hao Xiong <mart1n@zju.edu.cn>
+Cc: stable <stable@vger.kernel.org>
+Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ net/bluetooth/hci_core.c |    7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+--- a/net/bluetooth/hci_core.c
++++ b/net/bluetooth/hci_core.c
+@@ -1561,8 +1561,13 @@ setup_failed:
+       } else {
+               /* Init failed, cleanup */
+               flush_work(&hdev->tx_work);
+-              flush_work(&hdev->cmd_work);
++
++              /* Since hci_rx_work() is possible to awake new cmd_work
++               * it should be flushed first to avoid unexpected call of
++               * hci_cmd_work()
++               */
+               flush_work(&hdev->rx_work);
++              flush_work(&hdev->cmd_work);
+               skb_queue_purge(&hdev->cmd_q);
+               skb_queue_purge(&hdev->rx_q);
index d8fecaa9b8a64b318a52bc6ac3c1f3a52d98e7ff..4897b96d32dee0eefb382460d85b18cd07c5ed4d 100644 (file)
@@ -35,3 +35,4 @@ arm-dts-imx-emcon-avari-fix-nxp-pca8574-gpio-cells.patch
 bus-ti-sysc-fix-flakey-idling-of-uarts-and-stop-usin.patch
 tipc-add-extack-messages-for-bearer-media-failure.patch
 tipc-fix-unique-bearer-names-sanity-check.patch
+bluetooth-fix-the-erroneous-flush_work-order.patch