Subject: CVE-2024-42315: exfat: fix potential deadlock on __exfat_get_dentry_set

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

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

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

exfat: fix potential deadlock on __exfat_get_dentry_set

When accessing a file with more entries than ES_MAX_ENTRY_NUM, the bh-array
is allocated in __exfat_get_entry_set. The problem is that the bh-array is
allocated with GFP_KERNEL. It does not make sense. In the following cases,
a deadlock for sbi->s_lock between the two processes may occur.

       CPU0                CPU1
       ----                ----
  kswapd
   balance_pgdat
    lock(fs_reclaim)
                      exfat_iterate
                       lock(&sbi->s_lock)
                       exfat_readdir
                        exfat_get_uniname_from_ext_entry
                         exfat_get_dentry_set
                          __exfat_get_dentry_set
                           kmalloc_array
                            ...
                            lock(fs_reclaim)
    ...
    evict
     exfat_evict_inode
      lock(&sbi->s_lock)

To fix this, let's allocate bh-array with GFP_NOFS.

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

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

	Issue introduced in 6.2 with commit a3ff29a95fde and fixed in 6.6.44 with commit a7ac198f8dba
	Issue introduced in 6.2 with commit a3ff29a95fde and fixed in 6.10.3 with commit 1d1970493c28
	Issue introduced in 6.2 with commit a3ff29a95fde and fixed in 6.11 with commit 89fc548767a2
	Issue introduced in 5.10.190 with commit bd3bdb9e0d65
	Issue introduced in 5.15.150 with commit 92dcd7d6c606

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-42315
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:
	fs/exfat/dir.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/a7ac198f8dba791e3144c4da48a5a9b95773ee4b
	https://git.kernel.org/stable/c/1d1970493c289e3f44b9ec847ed26a5dbdf56a62
	https://git.kernel.org/stable/c/89fc548767a2155231128cb98726d6d2ea1256c9