| From bippy-5f407fcff5a0 Mon Sep 17 00:00:00 2001 |
| From: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| To: <linux-cve-announce@vger.kernel.org> |
| Reply-to: <cve@kernel.org>, <linux-kernel@vger.kernel.org> |
| Subject: CVE-2024-56568: iommu/arm-smmu: Defer probe of clients after smmu device bound |
| |
| Description |
| =========== |
| |
| In the Linux kernel, the following vulnerability has been resolved: |
| |
| iommu/arm-smmu: Defer probe of clients after smmu device bound |
| |
| Null pointer dereference occurs due to a race between smmu |
| driver probe and client driver probe, when of_dma_configure() |
| for client is called after the iommu_device_register() for smmu driver |
| probe has executed but before the driver_bound() for smmu driver |
| has been called. |
| |
| Following is how the race occurs: |
| |
| T1:Smmu device probe T2: Client device probe |
| |
| really_probe() |
| arm_smmu_device_probe() |
| iommu_device_register() |
| really_probe() |
| platform_dma_configure() |
| of_dma_configure() |
| of_dma_configure_id() |
| of_iommu_configure() |
| iommu_probe_device() |
| iommu_init_device() |
| arm_smmu_probe_device() |
| arm_smmu_get_by_fwnode() |
| driver_find_device_by_fwnode() |
| driver_find_device() |
| next_device() |
| klist_next() |
| /* null ptr |
| assigned to smmu */ |
| /* null ptr dereference |
| while smmu->streamid_mask */ |
| driver_bound() |
| klist_add_tail() |
| |
| When this null smmu pointer is dereferenced later in |
| arm_smmu_probe_device, the device crashes. |
| |
| Fix this by deferring the probe of the client device |
| until the smmu device has bound to the arm smmu driver. |
| |
| [will: Add comment] |
| |
| The Linux kernel CVE team has assigned CVE-2024-56568 to this issue. |
| |
| |
| Affected and fixed versions |
| =========================== |
| |
| Issue introduced in 4.9 with commit 021bb8420d44cf56102d44fca9af628625e75482 and fixed in 5.10.231 with commit c2527d07c7e9cda2c6165d5edccf74752baac1b0 |
| Issue introduced in 4.9 with commit 021bb8420d44cf56102d44fca9af628625e75482 and fixed in 5.15.174 with commit dc02407ea952e20c544a078a6be2e6f008327973 |
| Issue introduced in 4.9 with commit 021bb8420d44cf56102d44fca9af628625e75482 and fixed in 6.1.120 with commit f8f794f387ad21c4696e5cd0626cb6f8a5f6aea5 |
| Issue introduced in 4.9 with commit 021bb8420d44cf56102d44fca9af628625e75482 and fixed in 6.6.66 with commit 4a9485918a042e3114890dfbe19839a1897f8b2c |
| Issue introduced in 4.9 with commit 021bb8420d44cf56102d44fca9af628625e75482 and fixed in 6.12.4 with commit 5018696b19bc6c021e934a8a59f4b1dd8c0ac9f8 |
| Issue introduced in 4.9 with commit 021bb8420d44cf56102d44fca9af628625e75482 and fixed in 6.13 with commit 229e6ee43d2a160a1592b83aad620d6027084aad |
| |
| Please see https://www.kernel.org for a full list of currently supported |
| kernel versions by the kernel community. |
| |
| Unaffected versions might change over time as fixes are backported to |
| older supported kernel versions. The official CVE entry at |
| https://cve.org/CVERecord/?id=CVE-2024-56568 |
| will be updated if fixes are backported, please check that for the most |
| up to date information about this issue. |
| |
| |
| Affected files |
| ============== |
| |
| The file(s) affected by this issue are: |
| drivers/iommu/arm/arm-smmu/arm-smmu.c |
| |
| |
| Mitigation |
| ========== |
| |
| The Linux kernel CVE team recommends that you update to the latest |
| stable kernel version for this, and many other bugfixes. Individual |
| changes are never tested alone, but rather are part of a larger kernel |
| release. Cherry-picking individual commits is not recommended or |
| supported by the Linux kernel community at all. If however, updating to |
| the latest release is impossible, the individual changes to resolve this |
| issue can be found at these commits: |
| https://git.kernel.org/stable/c/c2527d07c7e9cda2c6165d5edccf74752baac1b0 |
| https://git.kernel.org/stable/c/dc02407ea952e20c544a078a6be2e6f008327973 |
| https://git.kernel.org/stable/c/f8f794f387ad21c4696e5cd0626cb6f8a5f6aea5 |
| https://git.kernel.org/stable/c/4a9485918a042e3114890dfbe19839a1897f8b2c |
| https://git.kernel.org/stable/c/5018696b19bc6c021e934a8a59f4b1dd8c0ac9f8 |
| https://git.kernel.org/stable/c/229e6ee43d2a160a1592b83aad620d6027084aad |