]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 Sep 2025 08:00:01 +0000 (10:00 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 Sep 2025 08:00:01 +0000 (10:00 +0200)
added patches:
dmaengine-qcom-bam_dma-fix-dt-error-handling-for-num-channels-ees.patch
phy-ti-pipe3-fix-device-leak-at-unbind.patch

queue-5.4/dmaengine-qcom-bam_dma-fix-dt-error-handling-for-num-channels-ees.patch [new file with mode: 0644]
queue-5.4/phy-ti-pipe3-fix-device-leak-at-unbind.patch [new file with mode: 0644]
queue-5.4/series

diff --git a/queue-5.4/dmaengine-qcom-bam_dma-fix-dt-error-handling-for-num-channels-ees.patch b/queue-5.4/dmaengine-qcom-bam_dma-fix-dt-error-handling-for-num-channels-ees.patch
new file mode 100644 (file)
index 0000000..e0f4150
--- /dev/null
@@ -0,0 +1,65 @@
+From 5068b5254812433e841a40886e695633148d362d Mon Sep 17 00:00:00 2001
+From: Stephan Gerhold <stephan.gerhold@linaro.org>
+Date: Wed, 12 Feb 2025 18:03:54 +0100
+Subject: dmaengine: qcom: bam_dma: Fix DT error handling for num-channels/ees
+
+From: Stephan Gerhold <stephan.gerhold@linaro.org>
+
+commit 5068b5254812433e841a40886e695633148d362d upstream.
+
+When we don't have a clock specified in the device tree, we have no way to
+ensure the BAM is on. This is often the case for remotely-controlled or
+remotely-powered BAM instances. In this case, we need to read num-channels
+from the DT to have all the necessary information to complete probing.
+
+However, at the moment invalid device trees without clock and without
+num-channels still continue probing, because the error handling is missing
+return statements. The driver will then later try to read the number of
+channels from the registers. This is unsafe, because it relies on boot
+firmware and lucky timing to succeed. Unfortunately, the lack of proper
+error handling here has been abused for several Qualcomm SoCs upstream,
+causing early boot crashes in several situations [1, 2].
+
+Avoid these early crashes by erroring out when any of the required DT
+properties are missing. Note that this will break some of the existing DTs
+upstream (mainly BAM instances related to the crypto engine). However,
+clearly these DTs have never been tested properly, since the error in the
+kernel log was just ignored. It's safer to disable the crypto engine for
+these broken DTBs.
+
+[1]: https://lore.kernel.org/r/CY01EKQVWE36.B9X5TDXAREPF@fairphone.com/
+[2]: https://lore.kernel.org/r/20230626145959.646747-1-krzysztof.kozlowski@linaro.org/
+
+Cc: stable@vger.kernel.org
+Fixes: 48d163b1aa6e ("dmaengine: qcom: bam_dma: get num-channels and num-ees from dt")
+Signed-off-by: Stephan Gerhold <stephan.gerhold@linaro.org>
+Reviewed-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
+Link: https://lore.kernel.org/r/20250212-bam-dma-fixes-v1-8-f560889e65d8@linaro.org
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/dma/qcom/bam_dma.c |    8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+--- a/drivers/dma/qcom/bam_dma.c
++++ b/drivers/dma/qcom/bam_dma.c
+@@ -1266,13 +1266,17 @@ static int bam_dma_probe(struct platform
+       if (bdev->controlled_remotely) {
+               ret = of_property_read_u32(pdev->dev.of_node, "num-channels",
+                                          &bdev->num_channels);
+-              if (ret)
++              if (ret) {
+                       dev_err(bdev->dev, "num-channels unspecified in dt\n");
++                      return ret;
++              }
+               ret = of_property_read_u32(pdev->dev.of_node, "qcom,num-ees",
+                                          &bdev->num_ees);
+-              if (ret)
++              if (ret) {
+                       dev_err(bdev->dev, "num-ees unspecified in dt\n");
++                      return ret;
++              }
+       }
+       bdev->bamclk = devm_clk_get(bdev->dev, "bam_clk");
diff --git a/queue-5.4/phy-ti-pipe3-fix-device-leak-at-unbind.patch b/queue-5.4/phy-ti-pipe3-fix-device-leak-at-unbind.patch
new file mode 100644 (file)
index 0000000..9d0e2eb
--- /dev/null
@@ -0,0 +1,58 @@
+From e19bcea99749ce8e8f1d359f68ae03210694ad56 Mon Sep 17 00:00:00 2001
+From: Johan Hovold <johan@kernel.org>
+Date: Thu, 24 Jul 2025 15:12:06 +0200
+Subject: phy: ti-pipe3: fix device leak at unbind
+
+From: Johan Hovold <johan@kernel.org>
+
+commit e19bcea99749ce8e8f1d359f68ae03210694ad56 upstream.
+
+Make sure to drop the reference to the control device taken by
+of_find_device_by_node() during probe when the driver is unbound.
+
+Fixes: 918ee0d21ba4 ("usb: phy: omap-usb3: Don't use omap_get_control_dev()")
+Cc: stable@vger.kernel.org     # 3.13
+Cc: Roger Quadros <rogerq@kernel.org>
+Signed-off-by: Johan Hovold <johan@kernel.org>
+Link: https://lore.kernel.org/r/20250724131206.2211-4-johan@kernel.org
+Signed-off-by: Vinod Koul <vkoul@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ drivers/phy/ti/phy-ti-pipe3.c |   13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+--- a/drivers/phy/ti/phy-ti-pipe3.c
++++ b/drivers/phy/ti/phy-ti-pipe3.c
+@@ -667,12 +667,20 @@ static int ti_pipe3_get_clk(struct ti_pi
+       return 0;
+ }
++static void ti_pipe3_put_device(void *_dev)
++{
++      struct device *dev = _dev;
++
++      put_device(dev);
++}
++
+ static int ti_pipe3_get_sysctrl(struct ti_pipe3 *phy)
+ {
+       struct device *dev = phy->dev;
+       struct device_node *node = dev->of_node;
+       struct device_node *control_node;
+       struct platform_device *control_pdev;
++      int ret;
+       phy->phy_power_syscon = syscon_regmap_lookup_by_phandle(node,
+                                                       "syscon-phy-power");
+@@ -703,6 +711,11 @@ static int ti_pipe3_get_sysctrl(struct t
+               }
+               phy->control_dev = &control_pdev->dev;
++
++              ret = devm_add_action_or_reset(dev, ti_pipe3_put_device,
++                                             phy->control_dev);
++              if (ret)
++                      return ret;
+       }
+       if (phy->mode == PIPE3_MODE_PCIE) {
index 7f9c16ba0aeab7b98bc23c0a570fbc9ca44d6a83..31445a3ed5c9d967c6a027dbd0b60d5a59649745 100644 (file)
@@ -25,3 +25,5 @@ i40e-fix-irq-freeing-in-i40e_vsi_request_irq_msix-er.patch
 can-j1939-j1939_sk_bind-call-j1939_priv_put-immediat.patch
 can-j1939-j1939_local_ecu_get-undo-increment-when-j1.patch
 dmaengine-ti-edma-fix-memory-allocation-size-for-que.patch
+dmaengine-qcom-bam_dma-fix-dt-error-handling-for-num-channels-ees.patch
+phy-ti-pipe3-fix-device-leak-at-unbind.patch