Subject: CVE-2024-26840: cachefiles: fix memory leak in cachefiles_add_cache()

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

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

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

cachefiles: fix memory leak in cachefiles_add_cache()

The following memory leak was reported after unbinding /dev/cachefiles:

==================================================================
unreferenced object 0xffff9b674176e3c0 (size 192):
  comm "cachefilesd2", pid 680, jiffies 4294881224
  hex dump (first 32 bytes):
    01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
    00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  ................
  backtrace (crc ea38a44b):
    [<ffffffff8eb8a1a5>] kmem_cache_alloc+0x2d5/0x370
    [<ffffffff8e917f86>] prepare_creds+0x26/0x2e0
    [<ffffffffc002eeef>] cachefiles_determine_cache_security+0x1f/0x120
    [<ffffffffc00243ec>] cachefiles_add_cache+0x13c/0x3a0
    [<ffffffffc0025216>] cachefiles_daemon_write+0x146/0x1c0
    [<ffffffff8ebc4a3b>] vfs_write+0xcb/0x520
    [<ffffffff8ebc5069>] ksys_write+0x69/0xf0
    [<ffffffff8f6d4662>] do_syscall_64+0x72/0x140
    [<ffffffff8f8000aa>] entry_SYSCALL_64_after_hwframe+0x6e/0x76
==================================================================

Put the reference count of cache_cred in cachefiles_daemon_unbind() to
fix the problem. And also put cache_cred in cachefiles_add_cache() error
branch to avoid memory leaks.

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

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

	Issue introduced in 2.6.30 with commit 9ae326a69004 and fixed in 4.19.309 with commit cb5466783793
	Issue introduced in 2.6.30 with commit 9ae326a69004 and fixed in 5.4.271 with commit 037d5a949b04
	Issue introduced in 2.6.30 with commit 9ae326a69004 and fixed in 5.10.212 with commit 43eccc582373
	Issue introduced in 2.6.30 with commit 9ae326a69004 and fixed in 5.15.151 with commit 94965be37add
	Issue introduced in 2.6.30 with commit 9ae326a69004 and fixed in 6.1.80 with commit 8b218e2f0a27
	Issue introduced in 2.6.30 with commit 9ae326a69004 and fixed in 6.6.19 with commit 38e921616320
	Issue introduced in 2.6.30 with commit 9ae326a69004 and fixed in 6.7.7 with commit 9cac69912052
	Issue introduced in 2.6.30 with commit 9ae326a69004 and fixed in 6.8 with commit e21a2f17566c

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-26840
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/cachefiles/cache.c
	fs/cachefiles/daemon.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/cb5466783793e66272624cf71925ae1d1ba32083
	https://git.kernel.org/stable/c/037d5a949b0455540ef9aab34c10ddf54b65d285
	https://git.kernel.org/stable/c/43eccc5823732ba6daab2511ed32dfc545a666d8
	https://git.kernel.org/stable/c/94965be37add0983672e48ecb33cdbda92b62579
	https://git.kernel.org/stable/c/8b218e2f0a27a9f09428b1847b4580640b9d1e58
	https://git.kernel.org/stable/c/38e921616320d159336b0ffadb09e9fb4945c7c3
	https://git.kernel.org/stable/c/9cac69912052a4def571fedf1cb9bb4ec590e25a
	https://git.kernel.org/stable/c/e21a2f17566cbd64926fb8f16323972f7a064444