Skip to main content

Linux Kernel EUVDEUVD-2026-45479

| CVE-2026-63813 HIGH
2026-07-19 Linux GHSA-q48g-gvv8-2599
7.8
CVSS 3.1 · Vendor: Linux
Share

Severity by source

Vendor (Linux) PRIMARY
7.8 HIGH
AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
vuln.today AI
5.3 MEDIUM

Local F2FS access and fallocate needed (AV:L/PR:L), success hinges on a narrow multi-process race (AC:H); demonstrated impact is a kernel panic (A:H) with UAF-driven integrity risk (I:L) and no shown disclosure (C:N).

3.1 AV:L/AC:H/PR:L/UI:N/S:U/C:N/I:L/A:H
4.0 AV:L/AC:H/AT:N/PR:L/UI:N/VC:N/VI:L/VA:H/SC:N/SI:N/SA:N
SUSE
5.5 MEDIUM
AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

Primary rating from Vendor (Linux).

CVSS VectorVendor: Linux

Attack Vector
Local
Attack Complexity
Low
Privileges Required
Low
User Interaction
None
Scope
Unchanged
Confidentiality
High
Integrity
High
Availability
High

Lifecycle Timeline

5
Analysis Generated
Jul 20, 2026 - 15:39 vuln.today
CVSS changed
Jul 20, 2026 - 15:22 NVD
7.8 (HIGH)
Patch available
Jul 19, 2026 - 14:17 EUVD
CVE Published
Jul 19, 2026 - 12:02 cve.org
HIGH 7.8
CVE Published
Jul 19, 2026 - 12:02 cve.org
UNKNOWN (no severity yet)

DescriptionCVE.org

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

Revert "f2fs: remove non-uptodate folio from the page cache in move_data_block"

This reverts commit 9609dd704725a40cd63d915f2ab6c44248a44598.

The kernel panics are keeping to be reported especially when the f2fs partition get almost full. By investigation, we find that the reason is one f2fs page got freed to buddy without being deleted from LRU and the root cause is the race happened in [2] which is enrolled by this commit.

There are 3 race processes in this scenario, please find below for their main activities.

The changed code in move_data_block() lets the GC path evict the tail-end folio from the page cache through folio_end_dropbehind(). Once folio_unmap_invalidate() removes the folio from mapping->i_pages, the page-cache references for all pages in the folio are dropped. The folio is then kept alive only by temporary external references, which allows a later split to operate on a folio whose subpages are no longer protected by page-cache references.

After the page-cache references are gone, split_folio_to_order() can split the big folio into individual pages and put the resulting subpages back on the LRU. For tail pages beyond EOF, split removes them from the page cache and drops their page-cache references. A tail page can then remain on the LRU with PG_lru set while holding only the split caller's temporary reference. When free_folio_and_swap_cache() drops that final reference, the page enters the final folio_put() release path.

In parallel, folio_isolate_lru() can observe the same tail page with a non-zero refcount and PG_lru set. It clears PG_lru before taking its own reference. If this races with the final folio_put() from the split path, __folio_put() sees PG_lru already cleared and skips lruvec_del_folio(). The page is then freed back to the allocator while its lru links are still present in the LRU list. A later LRU operation on a neighboring page detects the stale link and reports list corruption.

[1] [ 22.486082] list_del corruption. next->prev should be fffffffec10e0ac8, but was dead000000000122. (next=fffffffec10e0a88) [ 22.486130] ------------[ cut here ]------------ [ 22.486134] kernel BUG at lib/list_debug.c:67! [ 22.486141] Internal error: Oops - BUG: 00000000f2000800 [#1] SMP [ 22.488502] Tainted: [W]=WARN, [O]=OOT_MODULE [ 22.488506] Hardware name: Spreadtrum UMS9230 1H10 SoC (DT) [ 22.488511] pstate: 604000c5 (nZCv daIF +PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 22.488517] pc : __list_del_entry_valid_or_report+0x14c/0x154 [ 22.488531] lr : __list_del_entry_valid_or_report+0x14c/0x154 [ 22.488539] sp : ffffffc08006b830 [ 22.488542] x29: ffffffc08006b868 x28: 0000000000003020 x27: 0000000000000000 [ 22.488553] x26: 0000000000000000 x25: 0000000000000004 x24: fffffffec10e0ac0 [ 22.488564] x23: 00000000000000e8 x22: 0000000000000024 x21: dead000000000122 [ 22.488574] x20: fffffffec10e0a88 x19: fffffffec10e0ac8 x18: ffffffc080061060 [ 22.488585] x17: 20747562202c3863 x16: 6130653031636566 x15: 0000000000000058 [ 22.488595] x14: 0000000000000004 x13: ffffff80f91e0000 x12: 0000000000000003 [ 22.488605] x11: 0000000000000003 x10: 0000000000000001 x9 : ffe85721f0e25f00 [ 22.488615] x8 : ffe85721f0e25f00 x7 : 0000000000000000 x6 : 6c65645f7473696c [ 22.488625] x5 : ffffffed39b23026 x4 : 0000000000000000 x3 : 0000000000000010 [ 22.488636] x2 : 0000000000000000 x1 : 0000000000000000 x0 : 000000000000006d [ 22.488647] Call trace: [ 22.488651] __list_del_entry_valid_or_report+0x14c/0x154 (P) [ 22.488661] __folio_put+0x2bc/0x434 [ 22.488670] folio_put+0x28/0x58 [ 22.488678] do_garbage_collect+0x1a34/0x2584 [ 22.488689] f2fs_gc+0x230/0x9b4 [ 22.488697] f2fs_fallocate+0xb90/0xdf4 [ 22.488706] vfs_fallocate+0x1b4/0x2bc [ 22.488716] __arm64_sys_fallocate+0x44/0x78 [ 22.488725] invoke_syscall+0x58/0xe4 [ 22.488732] do_el0_svc+0x48/0xdc [ 22.488739] el0 ---truncated---

AnalysisAI

Memory corruption in the Linux kernel's F2FS filesystem lets a local low-privileged user trigger LRU list corruption and a kernel panic (denial of service) by driving garbage collection on a nearly-full F2FS partition via fallocate. The bug is a use-after-free-class race introduced by commit 9609dd704725 in move_data_block(), where a folio is dropped from the page cache and later split, leaving a tail page freed back to the allocator while still linked in the LRU; the fix is a revert of that commit. No public exploit has been identified at time of analysis, and EPSS exploitation probability is low (0.15%, 5th percentile).

Technical ContextAI

The affected component is F2FS (Flash-Friendly File System), a log-structured filesystem widely used on Android and flash/eMMC/UFS storage. The root cause is a race condition (CWE-362) that manifests as a use-after-free / list corruption (CWE-416/CWE-416-adjacent). In the garbage-collection path move_data_block(), the offending commit caused the GC path to evict the tail-end folio from the page cache via folio_end_dropbehind(); once folio_unmap_invalidate() removes the folio from mapping->i_pages, all page-cache references are dropped and the folio survives only on temporary external references. A subsequent split_folio_to_order() can split the large folio and place subpages back on the LRU with PG_lru set while holding only the split caller's temporary reference. When free_folio_and_swap_cache() drops the last reference concurrently with folio_isolate_lru() (which clears PG_lru before taking its own reference), __folio_put() observes PG_lru already cleared and skips lruvec_del_folio(), so the page is freed to the buddy allocator while its LRU links remain live. A later LRU operation on a neighboring page then hits the stale link and triggers the BUG in __list_del_entry_valid_or_report(). CPE data identifies the product only generically as cpe:2.3:a:linux:linux.

RemediationAI

Vendor-released patch: update to a fixed Linux kernel - stable 7.1.3 or 7.2-rc1 or later, or apply the backported fixes for your branch via the stable commits at https://git.kernel.org/stable/c/6e035dae44154af4dd7bdb8ef7a1118c0b5f17b6, https://git.kernel.org/stable/c/ccaba785821970f422c47770331c7e3271763f17, and https://git.kernel.org/stable/c/1991d49433e90b2202de2fe90be3c24161873d7c; the fix simply reverts commit 9609dd704725. Distribution and Android/vendor-kernel users should pull the corresponding kernel package update. If immediate patching is not possible, the practical compensating control is to reduce the trigger surface: avoid running F2FS partitions near-full (the panics cluster when the partition is almost full), since GC pressure and folio splitting are what expose the race - the trade-off is reduced usable capacity and it only lowers, not eliminates, the probability. Where feasible, restricting which local users can invoke fallocate-heavy workloads on F2FS mounts, or migrating sensitive systems off F2FS to another filesystem, further limits exposure at the cost of operational change; there is no clean feature-flag workaround because the fault is in the core GC/page-cache path.

Vendor StatusVendor

SUSE

Severity: Moderate
Product Status
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise Desktop 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 16.0 Not-Affected

Share

EUVD-2026-45479 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy