LiveActive security incident?Get immediate response
CVE Record

CVE-2021-47635: ubifs: Fix to add refcount once page is set private

In the Linux kernel, the following vulnerability has been resolved: ubifs: Fix to add refcount once page is set private MM defined the rule [1] very clearly that once page was set with PG_private flag, we should increment the refcount in that page, also main flows like pageout(), migrate_page() will assume there is one additional page reference count if page_has_private() returns true. Otherwise, we may get a BUG in page migration: page:0000000080d05b9d refcount:-1 mapcount:0 mapping:000000005f4d82a8 index:0xe2 pfn:0x14c12 aops:ubifs_file_address_operations [ubifs] ino:8f1 dentry name:"f30e" flags: 0x1fffff80002405(locked|uptodate|owner_priv_1|private|node=0| zone=1|lastcpupid=0x1fffff) page dumped because: VM_BUG_ON_PAGE(page_count(page) != 0) ------------[ cut here ]------------ kernel BUG at include/linux/page_ref.h:184! invalid opcode: 0000 [#1] SMP CPU: 3 PID: 38 Comm: kcompactd0 Not tainted 5.15.0-rc5 RIP: 0010:migrate_page_move_mapping+0xac3/0xe70 Call Trace: ubifs_migrate_page+0x22/0xc0 [ubifs] move_to_new_page+0xb4/0x600 migrate_pages+0x1523/0x1cc0 compact_zone+0x8c5/0x14b0 kcompactd+0x2bc/0x560 kthread+0x18c/0x1e0 ret_from_fork+0x1f/0x30 Before the time, we should make clean a concept, what does refcount means in page gotten from grab_cache_page_write_begin(). There are 2 situations: Situation 1: refcount is 3, page is created by __page_cache_alloc. TYPE_A - the write process is using this page TYPE_B - page is assigned to one certain mapping by calling __add_to_page_cache_locked() TYPE_C - page is added into pagevec list corresponding current cpu by calling lru_cache_add() Situation 2: refcount is 2, page is gotten from the mapping's tree TYPE_B - page has been assigned to one certain mapping TYPE_A - the write process is using this page (by calling page_cache_get_speculative()) Filesystem releases one refcount by calling put_page() in xxx_write_end(), the released refcount corresponds to TYPE_A (write task is using it). If there are any processes using a page, page migration process will skip the page by judging whether expected_page_refs() equals to page refcount. The BUG is caused by following process: PA(cpu 0) kcompactd(cpu 1) compact_zone ubifs_write_begin page_a = grab_cache_page_write_begin add_to_page_cache_lru lru_cache_add pagevec_add // put page into cpu 0's pagevec (refcnf = 3, for page creation process) ubifs_write_end SetPagePrivate(page_a) // doesn't increase page count ! unlock_page(page_a) put_page(page_a) // refcnt = 2 [...] PB(cpu 0) filemap_read filemap_get_pages add_to_page_cache_lru lru_cache_add __pagevec_lru_add // traverse all pages in cpu 0's pagevec __pagevec_lru_add_fn SetPageLRU(page_a) isolate_migratepages isolate_migratepages_block get_page_unless_zero(page_a) // refcnt = 3 list_add(page_a, from_list) migrate_pages(from_list) __unmap_and_move move_to_new_page ubifs_migrate_page(page_a) migrate_page_move_mapping expected_page_refs get 3 (migration[1] + mapping[1] + private[1]) release_pages put_page_testzero(page_a) // refcnt = 3 page_ref_freeze // refcnt = 0 page_ref_dec_and_test(0 - 1 = -1) page_ref_unfreeze VM_BUG_ON_PAGE(-1 != 0, page) UBIFS doesn't increase the page refcount after setting private flag, which leads to page migration task believes the page is not used by any other processes, so the page is migrated. This causes concurrent accessing on page refcount between put_page() called by other process(eg. read process calls lru_cache_add) and page_ref_unfreeze() called by mi ---truncated---

UnknownCVSS not scoredNot KEV-listedUpdated
Glexia's TakeAutomated analysismoderate

Security readout for executives and security teams

Plain-English summary

This is a Linux kernel stability flaw in UBIFS. When UBIFS marks a memory page as private, it fails to add the expected reference count. Under page migration, that mismatch can trigger a kernel BUG, likely causing a crash or service interruption on systems using UBIFS.

Executive priority

Treat as a stability and availability risk for Linux fleets using UBIFS. Prioritize embedded, appliance, and flash-storage systems first. Broad enterprise urgency is lower unless UBIFS is present in production workloads.

Technical view

UBIFS sets PG_private without incrementing the page refcount. Kernel migration code expects an extra reference when page_has_private() is true. The mismatch can drive refcount handling negative during migration paths involving migrate_page_move_mapping() and ubifs_migrate_page(), producing VM_BUG_ON_PAGE.

Likely exposure

Exposure is most likely on Linux systems using UBIFS, commonly embedded or flash-storage environments. Systems without UBIFS enabled or mounted are less likely exposed. The bundle lists Linux kernel affected ranges and stable fix commits, but no CVSS score.

Exploitation context

The source bundle does not cite active exploitation, and KEV is false. The described impact is a kernel BUG during normal memory-management and UBIFS page activity. No public exploit status is established by the provided sources.

Researcher notes

The evidence supports a refcounting bug in UBIFS page-private handling fixed by Linux stable commits. The bundle does not provide CVSS, CWE, attack preconditions, privilege requirements, or proof of exploitability beyond the crash trace.

Mitigation direction

  • Update to a vendor kernel containing the referenced UBIFS stable fixes.
  • Prioritize devices where UBIFS is enabled, mounted, or required for flash storage.
  • Check Linux distribution advisories for backported fixes matching your kernel build.
  • If UBIFS is unnecessary, disable or avoid using it where operationally feasible.

Validation and detection

  • Inventory Linux kernel versions across devices and appliances.
  • Identify systems with UBIFS configured, loaded, or mounted.
  • Compare kernel builds against vendor advisories or the listed stable commits.
  • Review crash logs for ubifs_migrate_page or migrate_page_move_mapping BUG traces.
Prepared
Confidence
medium
Sources
7

Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.

Potential ATT&CK relevance

Conservative CVE-to-ATT&CK context

These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.

ATT&CK lookup starting points

Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.

cve · low confidence lookup

CVE-2021-47635 mapping review

Open the CVE-to-ATT&CK bridge for reviewed, inferred, or future official mappings tied to this CVE.

Open ATT&CK lookup
Vulnerability profileCVE Program record
Severity
Unknown
CVSS
Not scored
Known Exploited
No
Published
Official CVE source material

CNA and ADP enrichment extracted from CVE v5

These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.

0CVSS vectors
3Timeline events
0ADP providers
6Source links

Vulnerability timeline

Timeline events are normalized from CVE metadata, CNA source timelines, ADP timelines, and KEV metadata when present.

  1. CVE reservedCVE Program

    The CVE ID was reserved by the assigning CNA.

  2. CVE publishedCVE Program

    The CVE record was published.

  3. CVE updatedCVE Program

    The CVE record metadata indicates this as the latest update time.

Affected products

Products and packages named in the record

VendorProductVersion / packageStatus
LinuxLinux1e51764a3c2ac05a23a22b2a95ddee4d9bffb16d, 1e51764a3c2ac05a23a22b2a95ddee4d9bffb16d, 1e51764a3c2ac05a23a22b2a95ddee4d9bffb16d, 1e51764a3c2ac05a23a22b2a95ddee4d9bffb16d, 1e51764a3c2ac05a23a22b2a95ddee4d9bffb16dunaffected
LinuxLinux2.6.27, 0, 5.10.110, 5.15.33, 5.16.19, 5.17.2, 5.18affected
Weakness

CWE details

No CWE listed

CWE links open Glexia weakness intelligence pages with official CWE context, developer remediation guidance, and related CVE mappings.