Subject: CVE-2023-52791: i2c: core: Run atomic i2c xfer when !preemptible

From: Greg Kroah-Hartman <[email-masked]>

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 bae1d3a05a8b and fixed in 5.4.262 with commit 25eb381a736e
	Issue introduced in 5.2 with commit bae1d3a05a8b and fixed in 5.10.202 with commit 25284c46b657
	Issue introduced in 5.2 with commit bae1d3a05a8b and fixed in 5.15.140 with commit f6237afabc34
	Issue introduced in 5.2 with commit bae1d3a05a8b and fixed in 6.1.64 with commit 185f3617adc8
	Issue introduced in 5.2 with commit bae1d3a05a8b and fixed in 6.5.13 with commit 8c3fa52a46ff
	Issue introduced in 5.2 with commit bae1d3a05a8b and fixed in 6.6.3 with commit 3473cf43b906
	Issue introduced in 5.2 with commit bae1d3a05a8b and fixed in 6.7 with commit aa49c90894d0

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