| 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-2023-52791: i2c: core: Run atomic i2c xfer when !preemptible |
| |
| Description |
| =========== |
| |
| In the Linux kernel, the following vulnerability has been resolved: |
| |
| i2c: core: Run atomic i2c xfer when !preemptible |
| |
| Since bae1d3a05a8b, i2c transfers are non-atomic if preemption is |
| disabled. However, non-atomic i2c transfers require preemption (e.g. in |
| wait_for_completion() while waiting for the DMA). |
| |
| panic() calls preempt_disable_notrace() before calling |
| emergency_restart(). Therefore, if an i2c device is used for the |
| restart, the xfer should be atomic. This avoids warnings like: |
| |
| [ 12.667612] WARNING: CPU: 1 PID: 1 at kernel/rcu/tree_plugin.h:318 rcu_note_context_switch+0x33c/0x6b0 |
| [ 12.676926] Voluntary context switch within RCU read-side critical section! |
| ... |
| [ 12.742376] schedule_timeout from wait_for_completion_timeout+0x90/0x114 |
| [ 12.749179] wait_for_completion_timeout from tegra_i2c_wait_completion+0x40/0x70 |
| ... |
| [ 12.994527] atomic_notifier_call_chain from machine_restart+0x34/0x58 |
| [ 13.001050] machine_restart from panic+0x2a8/0x32c |
| |
| Use !preemptible() instead, which is basically the same check as |
| pre-v5.2. |
| |
| The Linux kernel CVE team has assigned CVE-2023-52791 to this issue. |
| |
| |
| Affected and fixed versions |
| =========================== |
| |
| Issue introduced in 5.2 with commit bae1d3a05a8b99bd748168bbf8155a1d047c562e and fixed in 5.4.262 with commit 25eb381a736e7ae39a4245ef5c96484eb1073809 |
| Issue introduced in 5.2 with commit bae1d3a05a8b99bd748168bbf8155a1d047c562e and fixed in 5.10.202 with commit 25284c46b657f48c0f3880a2e0706c70d81182c0 |
| Issue introduced in 5.2 with commit bae1d3a05a8b99bd748168bbf8155a1d047c562e and fixed in 5.15.140 with commit f6237afabc349c1c7909db00e15d2816519e0d2b |
| Issue introduced in 5.2 with commit bae1d3a05a8b99bd748168bbf8155a1d047c562e and fixed in 6.1.64 with commit 185f3617adc8fe45e40489b458f03911f0dec46c |
| Issue introduced in 5.2 with commit bae1d3a05a8b99bd748168bbf8155a1d047c562e and fixed in 6.5.13 with commit 8c3fa52a46ff4d208cefb1a462ec94e0043a91e1 |
| Issue introduced in 5.2 with commit bae1d3a05a8b99bd748168bbf8155a1d047c562e and fixed in 6.6.3 with commit 3473cf43b9068b9dfef2f545f833f33c6a544b91 |
| Issue introduced in 5.2 with commit bae1d3a05a8b99bd748168bbf8155a1d047c562e and fixed in 6.7 with commit aa49c90894d06e18a1ee7c095edbd2f37c232d02 |
| |
| 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-2023-52791 |
| 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/i2c/i2c-core.h |
| |
| |
| 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/25eb381a736e7ae39a4245ef5c96484eb1073809 |
| https://git.kernel.org/stable/c/25284c46b657f48c0f3880a2e0706c70d81182c0 |
| https://git.kernel.org/stable/c/f6237afabc349c1c7909db00e15d2816519e0d2b |
| https://git.kernel.org/stable/c/185f3617adc8fe45e40489b458f03911f0dec46c |
| https://git.kernel.org/stable/c/8c3fa52a46ff4d208cefb1a462ec94e0043a91e1 |
| https://git.kernel.org/stable/c/3473cf43b9068b9dfef2f545f833f33c6a544b91 |
| https://git.kernel.org/stable/c/aa49c90894d06e18a1ee7c095edbd2f37c232d02 |