| 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-2025-21824: gpu: host1x: Fix a use of uninitialized mutex |
| |
| Description |
| =========== |
| |
| In the Linux kernel, the following vulnerability has been resolved: |
| |
| gpu: host1x: Fix a use of uninitialized mutex |
| |
| commit c8347f915e67 ("gpu: host1x: Fix boot regression for Tegra") |
| caused a use of uninitialized mutex leading to below warning when |
| CONFIG_DEBUG_MUTEXES and CONFIG_DEBUG_LOCK_ALLOC are enabled. |
| |
| [ 41.662843] ------------[ cut here ]------------ |
| [ 41.663012] DEBUG_LOCKS_WARN_ON(lock->magic != lock) |
| [ 41.663035] WARNING: CPU: 4 PID: 794 at kernel/locking/mutex.c:587 __mutex_lock+0x670/0x878 |
| [ 41.663458] Modules linked in: rtw88_8822c(+) bluetooth(+) rtw88_pci rtw88_core mac80211 aquantia libarc4 crc_itu_t cfg80211 tegra194_cpufreq dwmac_tegra(+) arm_dsu_pmu stmmac_platform stmmac pcs_xpcs rfkill at24 host1x(+) tegra_bpmp_thermal ramoops reed_solomon fuse loop nfnetlink xfs mmc_block rpmb_core ucsi_ccg ina3221 crct10dif_ce xhci_tegra ghash_ce lm90 sha2_ce sha256_arm64 sha1_ce sdhci_tegra pwm_fan sdhci_pltfm sdhci gpio_keys rtc_tegra cqhci mmc_core phy_tegra_xusb i2c_tegra tegra186_gpc_dma i2c_tegra_bpmp spi_tegra114 dm_mirror dm_region_hash dm_log dm_mod |
| [ 41.665078] CPU: 4 UID: 0 PID: 794 Comm: (udev-worker) Not tainted 6.11.0-29.31_1538613708.el10.aarch64+debug #1 |
| [ 41.665838] Hardware name: NVIDIA NVIDIA Jetson AGX Orin Developer Kit/Jetson, BIOS 36.3.0-gcid-35594366 02/26/2024 |
| [ 41.672555] pstate: 60400009 (nZCv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) |
| [ 41.679636] pc : __mutex_lock+0x670/0x878 |
| [ 41.683834] lr : __mutex_lock+0x670/0x878 |
| [ 41.688035] sp : ffff800084b77090 |
| [ 41.691446] x29: ffff800084b77160 x28: ffffdd4bebf7b000 x27: ffffdd4be96b1000 |
| [ 41.698799] x26: 1fffe0002308361c x25: 1ffff0001096ee18 x24: 0000000000000000 |
| [ 41.706149] x23: 0000000000000000 x22: 0000000000000002 x21: ffffdd4be6e3c7a0 |
| [ 41.713500] x20: ffff800084b770f0 x19: ffff00011841b1e8 x18: 0000000000000000 |
| [ 41.720675] x17: 0000000000000000 x16: 0000000000000000 x15: 0720072007200720 |
| [ 41.728023] x14: 0000000000000000 x13: 0000000000000001 x12: ffff6001a96eaab3 |
| [ 41.735375] x11: 1fffe001a96eaab2 x10: ffff6001a96eaab2 x9 : ffffdd4be4838bbc |
| [ 41.742723] x8 : 00009ffe5691554e x7 : ffff000d4b755593 x6 : 0000000000000001 |
| [ 41.749985] x5 : ffff000d4b755590 x4 : 1fffe0001d88f001 x3 : dfff800000000000 |
| [ 41.756988] x2 : 0000000000000000 x1 : 0000000000000000 x0 : ffff0000ec478000 |
| [ 41.764251] Call trace: |
| [ 41.766695] __mutex_lock+0x670/0x878 |
| [ 41.770373] mutex_lock_nested+0x2c/0x40 |
| [ 41.774134] host1x_intr_start+0x54/0xf8 [host1x] |
| [ 41.778863] host1x_runtime_resume+0x150/0x228 [host1x] |
| [ 41.783935] pm_generic_runtime_resume+0x84/0xc8 |
| [ 41.788485] __rpm_callback+0xa0/0x478 |
| [ 41.792422] rpm_callback+0x15c/0x1a8 |
| [ 41.795922] rpm_resume+0x698/0xc08 |
| [ 41.799597] __pm_runtime_resume+0xa8/0x140 |
| [ 41.803621] host1x_probe+0x810/0xbc0 [host1x] |
| [ 41.807909] platform_probe+0xcc/0x1a8 |
| [ 41.811845] really_probe+0x188/0x800 |
| [ 41.815347] __driver_probe_device+0x164/0x360 |
| [ 41.819810] driver_probe_device+0x64/0x1a8 |
| [ 41.823834] __driver_attach+0x180/0x490 |
| [ 41.827773] bus_for_each_dev+0x104/0x1a0 |
| [ 41.831797] driver_attach+0x44/0x68 |
| [ 41.835296] bus_add_driver+0x23c/0x4e8 |
| [ 41.839235] driver_register+0x15c/0x3a8 |
| [ 41.843170] __platform_register_drivers+0xa4/0x208 |
| [ 41.848159] tegra_host1x_init+0x4c/0xff8 [host1x] |
| [ 41.853147] do_one_initcall+0xd4/0x380 |
| [ 41.856997] do_init_module+0x1dc/0x698 |
| [ 41.860758] load_module+0xc70/0x1300 |
| [ 41.864435] __do_sys_init_module+0x1a8/0x1d0 |
| [ 41.868721] __arm64_sys_init_module+0x74/0xb0 |
| [ 41.873183] invoke_syscall.constprop.0+0xdc/0x1e8 |
| [ 41.877997] do_el0_svc+0x154/0x1d0 |
| [ 41.881671] el0_svc+0x54/0x140 |
| [ 41.884820] el0t_64_sync_handler+0x120/0x130 |
| [ 41.889285] el0t_64_sync+0x1a4/0x1a8 |
| [ 41.892960] irq event stamp: 69737 |
| [ 41.896370] hardirqs last enabled at (69737): [<ffffdd4be6d7768c>] _raw_spin_unlock_irqrestore+0x44/0xe8 |
| [ 41.905739] hardirqs last disabled at (69736): [<ffffdd4be59dcd40>] clk_enable_lock+0x98/0x198 |
| [ 41.914314] softirqs last enabled at (68082): [<ffffdd4be466b1d0>] handle_softirqs+0x4c8/0x890 |
| [ 41.922977] softirqs last disabled at (67945): [<ffffdd4be44f02a4>] __do_softirq+0x1c/0x28 |
| [ 41.931289] ---[ end trace 0000000000000000 ]--- |
| |
| Inside the probe function when pm_runtime_enable() is called, |
| the PM core invokes a resume callback if the device Host1x is |
| in a suspended state. As it can be seen in the logs above, |
| this leads to host1x_intr_start() function call which is |
| trying to acquire a mutex lock. But, the function |
| host_intr_init() only gets called after the pm_runtime_enable() |
| where mutex is initialised leading to the use of mutex |
| prior to its initialisation. |
| |
| Fix this by moving the mutex initialisation prior to the runtime |
| PM enablement function pm_runtime_enable() in probe. |
| |
| The Linux kernel CVE team has assigned CVE-2025-21824 to this issue. |
| |
| |
| Affected and fixed versions |
| =========================== |
| |
| Issue introduced in 6.12 with commit c8347f915e6779f6c861e7a041adf3559d51b363 and fixed in 6.12.16 with commit 396d8e5136b4476672bc15b83ba312486bb4bf76 |
| Issue introduced in 6.12 with commit c8347f915e6779f6c861e7a041adf3559d51b363 and fixed in 6.13.4 with commit 127e91638ddcd02b80de92fec2240609a9f90426 |
| Issue introduced in 6.12 with commit c8347f915e6779f6c861e7a041adf3559d51b363 and fixed in 6.14 with commit 02458fbfaa0170aabf8506f7d4ed054f02414251 |
| |
| 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-2025-21824 |
| 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/gpu/host1x/dev.c |
| drivers/gpu/host1x/intr.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/396d8e5136b4476672bc15b83ba312486bb4bf76 |
| https://git.kernel.org/stable/c/127e91638ddcd02b80de92fec2240609a9f90426 |
| https://git.kernel.org/stable/c/02458fbfaa0170aabf8506f7d4ed054f02414251 |