Subject: CVE-2024-42265: protect the fetch of ->fd[fd] in do_dup2() from mispredictions

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

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

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

protect the fetch of ->fd[fd] in do_dup2() from mispredictions

both callers have verified that fd is not greater than ->max_fds;
however, misprediction might end up with
        tofree = fdt->fd[fd];
being speculatively executed.  That's wrong for the same reasons
why it's wrong in close_fd()/file_close_fd_locked(); the same
solution applies - array_index_nospec(fd, fdt->max_fds) could differ
from fd only in case of speculative execution on mispredicted path.

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

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

	Fixed in 4.19.320 with commit ed42e8ff509d
	Fixed in 5.4.282 with commit 41a6c31df77b
	Fixed in 5.10.224 with commit 08775b3d6ed1
	Fixed in 5.15.165 with commit 3f480493550b
	Fixed in 6.1.104 with commit 5db999fff545
	Fixed in 6.6.45 with commit da72e783afd2
	Fixed in 6.10.4 with commit 1171ceccabfd
	Fixed in 6.11 with commit 8aa37bde1a7b

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-42265
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/file.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/ed42e8ff509d2a61c6642d1825032072dab79f26
	https://git.kernel.org/stable/c/41a6c31df77bd8e050136b0a200b537da9e1084a
	https://git.kernel.org/stable/c/08775b3d6ed117cf4518754ec7300ee42b6a5368
	https://git.kernel.org/stable/c/3f480493550b6a23d3a65d095d6569d4a7f56a0f
	https://git.kernel.org/stable/c/5db999fff545b924b24c9afd368ef5c17279b176
	https://git.kernel.org/stable/c/da72e783afd27d9f487836b2e6738146c0edd149
	https://git.kernel.org/stable/c/1171ceccabfd596ca370c5d2cbb47d110c3f2fe1
	https://git.kernel.org/stable/c/8aa37bde1a7b645816cda8b80df4753ecf172bf1