Subject: CVE-2023-52498: PM: sleep: Fix possible deadlocks in core system-wide PM code

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

Description
===========

In the Linux kernel, the following vulnerability has been resolved:

PM: sleep: Fix possible deadlocks in core system-wide PM code

It is reported that in low-memory situations the system-wide resume core
code deadlocks, because async_schedule_dev() executes its argument
function synchronously if it cannot allocate memory (and not only in
that case) and that function attempts to acquire a mutex that is already
held.  Executing the argument function synchronously from within
dpm_async_fn() may also be problematic for ordering reasons (it may
cause a consumer device's resume callback to be invoked before a
requisite supplier device's one, for example).

Address this by changing the code in question to use
async_schedule_dev_nocall() for scheduling the asynchronous
execution of device suspend and resume functions and to directly
run them synchronously if async_schedule_dev_nocall() returns false.

The Linux kernel CVE team has assigned CVE-2023-52498 to this issue.

Affected and fixed versions
===========================

	Fixed in 5.10.210 with commit f46eb832389f
	Fixed in 5.15.149 with commit a1d62c775b07
	Fixed in 6.1.76 with commit e1c9d32c9830
	Fixed in 6.6.15 with commit e681e29d1f59
	Fixed in 6.7.3 with commit 9bd3dce27b01
	Fixed in 6.8 with commit 7839d0078e0d

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-52498
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/base/power/main.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/f46eb832389f162ad13cb780d0b8cde93641990d
	https://git.kernel.org/stable/c/a1d62c775b07213c73f81ae842424c74dd14b5f0
	https://git.kernel.org/stable/c/e1c9d32c98309ae764893a481552d3f99d46cb34
	https://git.kernel.org/stable/c/e681e29d1f59a04ef773296e4bebb17b1b79f8fe
	https://git.kernel.org/stable/c/9bd3dce27b01c51295b60e1433e1dadfb16649f7
	https://git.kernel.org/stable/c/7839d0078e0d5e6cc2fa0b0dfbee71de74f1e557