Subject: CVE-2024-49856: x86/sgx: Fix deadlock in SGX NUMA node search

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

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

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

x86/sgx: Fix deadlock in SGX NUMA node search

When the current node doesn't have an EPC section configured by firmware
and all other EPC sections are used up, CPU can get stuck inside the
while loop that looks for an available EPC page from remote nodes
indefinitely, leading to a soft lockup. Note how nid_of_current will
never be equal to nid in that while loop because nid_of_current is not
set in sgx_numa_mask.

Also worth mentioning is that it's perfectly fine for the firmware not
to setup an EPC section on a node. While setting up an EPC section on
each node can enhance performance, it is not a requirement for
functionality.

Rework the loop to start and end on *a* node that has SGX memory. This
avoids the deadlock looking for the current SGX-lacking node to show up
in the loop when it never will.

The Linux kernel CVE team has assigned CVE-2024-49856 to this issue.

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

	Issue introduced in 5.13 with commit 901ddbb9ecf5 and fixed in 5.15.168 with commit 40fb64257dab
	Issue introduced in 5.13 with commit 901ddbb9ecf5 and fixed in 6.1.113 with commit 20c96d0aaabf
	Issue introduced in 5.13 with commit 901ddbb9ecf5 and fixed in 6.6.54 with commit fb2d057539ed
	Issue introduced in 5.13 with commit 901ddbb9ecf5 and fixed in 6.10.13 with commit 0f89fb4042c0
	Issue introduced in 5.13 with commit 901ddbb9ecf5 and fixed in 6.11.2 with commit 8132510c9158
	Issue introduced in 5.13 with commit 901ddbb9ecf5 and fixed in 6.12-rc1 with commit 9c9368440104

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-2024-49856
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:
	arch/x86/kernel/cpu/sgx/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/40fb64257dab507d86b5f1f2a62f3669ef0c91a8
	https://git.kernel.org/stable/c/20c96d0aaabfe361fc2a11c173968dc67feadbbf
	https://git.kernel.org/stable/c/fb2d057539eda67ec7cfc369bf587e6518a9b99d
	https://git.kernel.org/stable/c/0f89fb4042c08fd143bfc28af08bf6c8a0197eea
	https://git.kernel.org/stable/c/8132510c915815e6b537ab937d94ed66893bc7b8
	https://git.kernel.org/stable/c/9c936844010466535bd46ea4ce4656ef17653644