Subject: CVE-2024-26764: fs/aio: Restrict kiocb_set_cancel_fn() to I/O submitted via libaio

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

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

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

fs/aio: Restrict kiocb_set_cancel_fn() to I/O submitted via libaio

If kiocb_set_cancel_fn() is called for I/O submitted via io_uring, the
following kernel warning appears:

WARNING: CPU: 3 PID: 368 at fs/aio.c:598 kiocb_set_cancel_fn+0x9c/0xa8
Call trace:
 kiocb_set_cancel_fn+0x9c/0xa8
 ffs_epfile_read_iter+0x144/0x1d0
 io_read+0x19c/0x498
 io_issue_sqe+0x118/0x27c
 io_submit_sqes+0x25c/0x5fc
 __arm64_sys_io_uring_enter+0x104/0xab0
 invoke_syscall+0x58/0x11c
 el0_svc_common+0xb4/0xf4
 do_el0_svc+0x2c/0xb0
 el0_svc+0x2c/0xa4
 el0t_64_sync_handler+0x68/0xb4
 el0t_64_sync+0x1a4/0x1a8

Fix this by setting the IOCB_AIO_RW flag for read and write I/O that is
submitted by libaio.

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

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

	Fixed in 4.19.308 with commit 337b543e274f
	Fixed in 5.4.270 with commit b4eea7a05ee0
	Fixed in 5.10.211 with commit ea1cd64d59f2
	Fixed in 5.15.150 with commit d7b6fa97ec89
	Fixed in 6.1.80 with commit 18f614369def
	Fixed in 6.6.19 with commit e7e23fc5d5fe
	Fixed in 6.7.7 with commit 1dc7d74fe456
	Fixed in 6.8 with commit b820de741ae4

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-26764
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/aio.c
	include/linux/fs.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/337b543e274fe7a8f47df3c8293cc6686ffa620f
	https://git.kernel.org/stable/c/b4eea7a05ee0ab5ab0514421e6ba8c5d249cf942
	https://git.kernel.org/stable/c/ea1cd64d59f22d6d13f367d62ec6e27b9344695f
	https://git.kernel.org/stable/c/d7b6fa97ec894edd02f64b83e5e72e1aa352f353
	https://git.kernel.org/stable/c/18f614369def2a11a52f569fe0f910b199d13487
	https://git.kernel.org/stable/c/e7e23fc5d5fe422827c9a43ecb579448f73876c7
	https://git.kernel.org/stable/c/1dc7d74fe456944a9b1c57bd776280249f441ac6
	https://git.kernel.org/stable/c/b820de741ae48ccf50dd95e297889c286ff4f760