Subject: CVE-2024-26870: NFSv4.2: fix nfs4_listxattr kernel BUG at mm/usercopy.c:102

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

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

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

NFSv4.2: fix nfs4_listxattr kernel BUG at mm/usercopy.c:102

A call to listxattr() with a buffer size = 0 returns the actual
size of the buffer needed for a subsequent call. When size > 0,
nfs4_listxattr() does not return an error because either
generic_listxattr() or nfs4_listxattr_nfs4_label() consumes
exactly all the bytes then size is 0 when calling
nfs4_listxattr_nfs4_user() which then triggers the following
kernel BUG:

  [   99.403778] kernel BUG at mm/usercopy.c:102!
  [   99.404063] Internal error: Oops - BUG: 00000000f2000800 [#1] SMP
  [   99.408463] CPU: 0 PID: 3310 Comm: python3 Not tainted 6.6.0-61.fc40.aarch64 #1
  [   99.415827] Call trace:
  [   99.415985]  usercopy_abort+0x70/0xa0
  [   99.416227]  __check_heap_object+0x134/0x158
  [   99.416505]  check_heap_object+0x150/0x188
  [   99.416696]  __check_object_size.part.0+0x78/0x168
  [   99.416886]  __check_object_size+0x28/0x40
  [   99.417078]  listxattr+0x8c/0x120
  [   99.417252]  path_listxattr+0x78/0xe0
  [   99.417476]  __arm64_sys_listxattr+0x28/0x40
  [   99.417723]  invoke_syscall+0x78/0x100
  [   99.417929]  el0_svc_common.constprop.0+0x48/0xf0
  [   99.418186]  do_el0_svc+0x24/0x38
  [   99.418376]  el0_svc+0x3c/0x110
  [   99.418554]  el0t_64_sync_handler+0x120/0x130
  [   99.418788]  el0t_64_sync+0x194/0x198
  [   99.418994] Code: aa0003e3 d000a3e0 91310000 97f49bdb (d4210000)

Issue is reproduced when generic_listxattr() returns 'system.nfs4_acl',
thus calling lisxattr() with size = 16 will trigger the bug.

Add check on nfs4_listxattr() to return ERANGE error when it is
called with size > 0 and the return value is greater than size.

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

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

	Issue introduced in 5.9 with commit 012a211abd5d and fixed in 5.10.214 with commit 4403438eaca6
	Issue introduced in 5.9 with commit 012a211abd5d and fixed in 5.15.153 with commit 9d52865ff282
	Issue introduced in 5.9 with commit 012a211abd5d and fixed in 6.1.83 with commit 06e828b3f1b2
	Issue introduced in 5.9 with commit 012a211abd5d and fixed in 6.6.23 with commit 79cdcc765969
	Issue introduced in 5.9 with commit 012a211abd5d and fixed in 6.7.11 with commit 80365c9f9601
	Issue introduced in 5.9 with commit 012a211abd5d and fixed in 6.8.2 with commit 23bfecb4d852
	Issue introduced in 5.9 with commit 012a211abd5d and fixed in 6.9 with commit 251a658bbfce

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-26870
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/nfs/nfs4proc.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/4403438eaca6e91f02d272211c4d6b045092396b
	https://git.kernel.org/stable/c/9d52865ff28245fc2134da9f99baff603a24407a
	https://git.kernel.org/stable/c/06e828b3f1b206de08ef520fc46a40b22e1869cb
	https://git.kernel.org/stable/c/79cdcc765969d23f4e3d6ea115660c3333498768
	https://git.kernel.org/stable/c/80365c9f96015bbf048fdd6c8705d3f8770132bf
	https://git.kernel.org/stable/c/23bfecb4d852751d5e403557dd500bb563313baf
	https://git.kernel.org/stable/c/251a658bbfceafb4d58c76b77682c8bf7bcfad65