| From bippy-7c5fe7eed585 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-22014: soc: qcom: pdr: Fix the potential deadlock |
| |
| Description |
| =========== |
| |
| In the Linux kernel, the following vulnerability has been resolved: |
| |
| soc: qcom: pdr: Fix the potential deadlock |
| |
| When some client process A call pdr_add_lookup() to add the look up for |
| the service and does schedule locator work, later a process B got a new |
| server packet indicating locator is up and call pdr_locator_new_server() |
| which eventually sets pdr->locator_init_complete to true which process A |
| sees and takes list lock and queries domain list but it will timeout due |
| to deadlock as the response will queued to the same qmi->wq and it is |
| ordered workqueue and process B is not able to complete new server |
| request work due to deadlock on list lock. |
| |
| Fix it by removing the unnecessary list iteration as the list iteration |
| is already being done inside locator work, so avoid it here and just |
| call schedule_work() here. |
| |
| Process A Process B |
| |
| process_scheduled_works() |
| pdr_add_lookup() qmi_data_ready_work() |
| process_scheduled_works() pdr_locator_new_server() |
| pdr->locator_init_complete=true; |
| pdr_locator_work() |
| mutex_lock(&pdr->list_lock); |
| |
| pdr_locate_service() mutex_lock(&pdr->list_lock); |
| |
| pdr_get_domain_list() |
| pr_err("PDR: %s get domain list |
| txn wait failed: %d\n", |
| req->service_name, |
| ret); |
| |
| Timeout error log due to deadlock: |
| |
| " |
| PDR: tms/servreg get domain list txn wait failed: -110 |
| PDR: service lookup for msm/adsp/sensor_pd:tms/servreg failed: -110 |
| " |
| |
| Thanks to Bjorn and Johan for letting me know that this commit also fixes |
| an audio regression when using the in-kernel pd-mapper as that makes it |
| easier to hit this race. [1] |
| |
| The Linux kernel CVE team has assigned CVE-2025-22014 to this issue. |
| |
| |
| Affected and fixed versions |
| =========================== |
| |
| Issue introduced in 5.7 with commit fbe639b44a82755d639df1c5d147c93f02ac5a0f and fixed in 5.10.236 with commit 72a222b6af10c2a05a5fad0029246229ed8912c2 |
| Issue introduced in 5.7 with commit fbe639b44a82755d639df1c5d147c93f02ac5a0f and fixed in 5.15.180 with commit daba84612236de3ab39083e62c9e326a654ebd20 |
| Issue introduced in 5.7 with commit fbe639b44a82755d639df1c5d147c93f02ac5a0f and fixed in 6.1.132 with commit 0a566a79aca9851fae140536e0fc5b0853c90a90 |
| Issue introduced in 5.7 with commit fbe639b44a82755d639df1c5d147c93f02ac5a0f and fixed in 6.6.85 with commit f2bbfd50e95bc117360f0f59e629aa03d821ebd6 |
| Issue introduced in 5.7 with commit fbe639b44a82755d639df1c5d147c93f02ac5a0f and fixed in 6.12.21 with commit f4489260f5713c94e1966e5f20445bff262876f4 |
| Issue introduced in 5.7 with commit fbe639b44a82755d639df1c5d147c93f02ac5a0f and fixed in 6.13.9 with commit 02612f1e4c34d94d6c8ee75bf7d254ed697e22d4 |
| Issue introduced in 5.7 with commit fbe639b44a82755d639df1c5d147c93f02ac5a0f and fixed in 6.14 with commit 2eeb03ad9f42dfece63051be2400af487ddb96d2 |
| |
| 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-22014 |
| 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/soc/qcom/pdr_interface.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/72a222b6af10c2a05a5fad0029246229ed8912c2 |
| https://git.kernel.org/stable/c/daba84612236de3ab39083e62c9e326a654ebd20 |
| https://git.kernel.org/stable/c/0a566a79aca9851fae140536e0fc5b0853c90a90 |
| https://git.kernel.org/stable/c/f2bbfd50e95bc117360f0f59e629aa03d821ebd6 |
| https://git.kernel.org/stable/c/f4489260f5713c94e1966e5f20445bff262876f4 |
| https://git.kernel.org/stable/c/02612f1e4c34d94d6c8ee75bf7d254ed697e22d4 |
| https://git.kernel.org/stable/c/2eeb03ad9f42dfece63051be2400af487ddb96d2 |