CVE-2026-89757

CVE-2026-89757

published September 12, 2026

CVSS
—
EPSS
0%
Percentile
10.1
In the wild
Unconfirmed
What it is

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

mm/mglru: fix and remove redundant unevictable folio handling

sort_folio() has a shortcut for moving folios that are no longer evictable

but are still sitting on a generation list. However, this shortcut is

buggy. It does not follow the PG_lru usage convention, and it has a more

serious issue.

Unevictable folios are not threaded on lists[LRU_UNEVICTABLE], so that

folio->lru can be reused to hold folio->mlock_count (see the comment in

lruvec_init()). Hence lruvec_add_folio() skips the list_add() for them,

and every other place that turns a folio unevictable initialises

mlock_count explicitly: lru_add() sets it to 0, __mlock_folio() and

__mlock_new_folio() set it to !!folio_test_mlocked(folio). sort_folio()

sets nothing, and the lru_gen_del_folio() right above it may have already

poisoned folio->lru via list_del(), so mlock_count ends up aliasing

LIST_POISON2, which reads as 0x122, i.e. 290. The result is user

visible. On munlock, __munlock_folio() decrements that bogus count, finds

it still non-zero and bails out before clearing PG_mlocked, so the folio

remains unevictable and the Mlocked accounting stays inflated until the

folio is freed.

The shortcut also touches the LRU flags in the wrong order. It calls

lru_gen_del_folio() while PG_lru is still set, so a concurrent

folio_test_clear_lru() (e.g. compaction, folio_isolate_lru()) can succeed

on a folio that has already been taken off the generation list, which may

lead to unexpected behavior.

So fix it by isolating them as common folios and letting the generic

shrink path cull them. This matches the classical LRU behavior, and there

should be no visible effect on the generic eviction or isolation behavior.

There is no performance concern either, such a folio goes through this

once, and then it is off the generation lists for good.

The record
Technical detail
CVSS
Not scored
CVSS v4.0
Not supplied
EPSS
0.00206 · 10.1th percentile
Published
2026-09-12T00:20Z
References (5)
EPSS history
Timeline
  • 13 SEP 03:23Z
    EPSS moved — → 0%
    epss
  • 11 SEP 19:46Z
    mm/mglru: fix and remove redundant unevictable folio handling
    cvelistv5