Description
In the Linux kernel, the following vulnerability has been resolved:
mm: filemap: fix nr_pages calculation overflow in filemap_map_pages()
When running stress-ng on my Arm64 machine with v7.0-rc3 kernel, I
encountered some very strange crash issues showing up as "Bad page state":
"
[ 734.496287] BUG: Bad page state in process stress-ng-env pfn:415735fb
[ 734.496427] page: refcount:0 mapcount:1 mapping:0000000000000000 index:0x4cf316 pfn:0x415735fb
[ 734.496434] flags: 0x57fffe000000800(owner_2|node=1|zone=2|lastcpupid=0x3ffff)
[ 734.496439] raw: 057fffe000000800 0000000000000000 dead000000000122 0000000000000000
[ 734.496440] raw: 00000000004cf316 0000000000000000 0000000000000000 0000000000000000
[ 734.496442] page dumped because: nonzero mapcount
"
After analyzing this page’s state, it is hard to understand why the
mapcount is not 0 while the refcount is 0, since this page is not where
the issue first occurred. By enabling the CONFIG_DEBUG_VM config, I can
reproduce the crash as well and captured the first warning where the issue
appears:
"
[ 734.469226] page: refcount:33 mapcount:0 mapping:00000000bef2d187 index:0x81a0 pfn:0x415735c0
[ 734.469304] head: order:5 mapcount:0 entire_mapcount:0 nr_pages_mapped:0 pincount:0
[ 734.469315] memcg:ffff000807a8ec00
[ 734.469320] aops:ext4_da_aops ino:100b6f dentry name(?):"stress-ng-mmaptorture-9397-0-2736200540"
[ 734.469335] flags: 0x57fffe400000069(locked|uptodate|lru|head|node=1|zone=2|lastcpupid=0x3ffff)
......
[ 734.469364] page dumped because: VM_WARN_ON_FOLIO((_Generic((page + nr_pages - 1),
const struct page *: (const struct folio *)_compound_head(page + nr_pages - 1), struct page *:
(struct folio *)_compound_head(page + nr_pages - 1))) != folio)
[ 734.469390] ------------[ cut here ]------------
[ 734.469393] WARNING: ./include/linux/rmap.h:351 at folio_add_file_rmap_ptes+0x3b8/0x468,
CPU#90: stress-ng-mlock/9430
[ 734.469551] folio_add_file_rmap_ptes+0x3b8/0x468 (P)
[ 734.469555] set_pte_range+0xd8/0x2f8
[ 734.469566] filemap_map_folio_range+0x190/0x400
[ 734.469579] filemap_map_pages+0x348/0x638
[ 734.469583] do_fault_around+0x140/0x198
......
[ 734.469640] el0t_64_sync+0x184/0x188
"
The code that triggers the warning is: "VM_WARN_ON_FOLIO(page_folio(page +
nr_pages - 1) != folio, folio)", which indicates that set_pte_range()
tried to map beyond the large folio’s size.
By adding more debug information, I found that 'nr_pages' had overflowed
in filemap_map_pages(), causing set_pte_range() to establish mappings for
a range exceeding the folio size, potentially corrupting fields of pages
that do not belong to this folio (e.g., page->_mapcount).
After above analysis, I think the possible race is as follows:
CPU 0 CPU 1
filemap_map_pages() ext4_setattr()
//get and lock folio with old inode->i_size
next_uptodate_folio()
.......
//shrink the inode->i_size
i_size_write(inode, attr->ia_size);
//calculate the end_pgoff with the new inode->i_size
file_end = DIV_ROUND_UP(i_size_read(mapping->host), PAGE_SIZE) - 1;
end_pgoff = min(end_pgoff, file_end);
......
//nr_pages can be overflowed, cause xas.xa_index > end_pgoff
end = folio_next_index(folio) - 1;
nr_pages = min(end, end_pgoff) - xas.xa_index + 1;
......
//map large folio
filemap_map_folio_range()
......
//truncate folios
truncate_pagecache(inode, inode->i_size);
To fix this issue, move the 'end_pgoff' calculation before
next_uptodate_folio(), so the retrieved folio stays consistent with the
file end to avoid
---truncated---
Affected products
| Vendor | Product | Affected | Fixed |
|---|---|---|---|
| Linux | Linux | 6.6.117 – < 6.6.135, 6.1.159 – < 6.2, 6.12 | 6.6.135 |
Fixed in Linux distributions
Distributions backport fixes, so the version that fixes this vulnerability differs per release — upgrade to at least the version shown. From the distributions' security trackers and advisories.
Debian
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Debian 14 | linux | 6.19.13-1 | — |
| Debian 13 | linux | 6.12.85-1 | — |
| Debian 12 | linux | No fix yet | — |
Ubuntu
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Ubuntu Nvidia-BlueField 24.04 LTS | linux-bluefield | 6.8.0-1028.33 | — |
| Ubuntu 26.04 LTS | linux-nvidia | 7.0.0-1006.6 | — |
| Ubuntu 25.10 | linux +8 | No fix yet | — |
| Ubuntu 24.04 LTS | linux | 6.8.0-136.136 | USN-8567-1 |
| Ubuntu 24.04 LTS | linux-aws | 6.8.0-1061.64 | USN-8595-2 |
| Ubuntu 24.04 LTS | linux-azure | 6.8.0-1063.71 | USN-8606-1 |
| Ubuntu 24.04 LTS | linux-azure-fde | 6.8.0-1062.69 | USN-8607-1 |
| Ubuntu 24.04 LTS | linux-gcp | 6.8.0-1064.72 | USN-8567-1 |
| Ubuntu 24.04 LTS | linux-gke | 6.8.0-1059.67 | USN-8567-1 |
| Ubuntu 24.04 LTS | linux-gkeop | 6.8.0-1046.50 | USN-8567-1 |
| Ubuntu 24.04 LTS | linux-ibm | 6.8.0-1061.62 | USN-8574-3 |
| Ubuntu 24.04 LTS | linux-lowlatency | 6.8.0-136.136.2 | USN-8574-2 |
| Ubuntu 24.04 LTS | linux-nvidia | 6.8.0-1059.62 | USN-8596-1 |
| Ubuntu 24.04 LTS | linux-nvidia-lowlatency | 6.8.0-1059.62.1 | USN-8596-1 |
| Ubuntu 24.04 LTS | linux-nvidia-tegra | 6.8.0-1030.31 | USN-8574-3 |
| Ubuntu 24.04 LTS | linux-oracle | 6.8.0-1058.61 | USN-8574-2 |
| Ubuntu 24.04 LTS | linux-raspi | 6.8.0-1061.65 | USN-8665-1 |
| Ubuntu 24.04 LTS | linux-riscv +27 | No fix yet | — |
| Ubuntu 24.04 LTS | linux-vmware | 6.8.0-1008.8 | — |
| Ubuntu 24.04 LTS | linux-xilinx | 6.8.0-1033.34 | USN-8574-3 |
| Ubuntu 22.04 LTS | linux-aws-6.8 | 6.8.0-1061.64~22.04.1 | USN-8595-3 |
| Ubuntu 22.04 LTS | linux-azure-6.8 | 6.8.0-1063.71~22.04.1 | USN-8606-1 |
| Ubuntu 22.04 LTS | linux-azure-fde-6.8 | 6.8.0-1062.69~22.04.1 | USN-8609-1 |
| Ubuntu 22.04 LTS | linux-gcp-6.8 | 6.8.0-1064.72~22.04.1 | USN-8567-1 |
| Ubuntu 22.04 LTS | linux-hwe-6.8 | 6.8.0-136.136~22.04.1 | USN-8619-1 |
| Ubuntu 22.04 LTS | linux-ibm-6.8 | 6.8.0-1061.62~22.04.1 | USN-8574-3 |
| Ubuntu 22.04 LTS | linux-lowlatency-hwe-6.8 | 6.8.0-136.136.2~22.04.1 | USN-8574-2 |
| Ubuntu 22.04 LTS | linux-nvidia-6.8 | 6.8.0-1059.62~22.04.1 | USN-8596-1 |
| Ubuntu 22.04 LTS | linux-oracle-6.8 | 6.8.0-1058.61~22.04.1 | USN-8595-1 |
| Ubuntu 22.04 LTS | linux-riscv +32 | No fix yet | — |
| Ubuntu 22.04 LTS | linux-riscv-6.8 | 6.8.0-136.136~22.04.3 | — |
Show 6 more (older releases, extended support, other products)Fewer releases
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Ubuntu 20.04 LTS | linux-gke +28 | No fix yet | — |
| Ubuntu 18.04 LTS | linux-gcp +14 | No fix yet | — |
| Ubuntu 16.04 LTS | linux-hwe-edge | No fix yet | — |
| Ubuntu Pro Realtime 24.04 LTS | linux-raspi-realtime | 6.8.0-2050.52 | USN-8665-1 |
| Ubuntu Pro Realtime 24.04 LTS | linux-realtime | 6.8.1-1056.57 | USN-8567-1 |
| Ubuntu Pro Realtime 24.04 LTS | linux-realtime-6.14 +1 | No fix yet | — |
| Ubuntu Pro Realtime 22.04 LTS | linux-realtime-6.8 | 6.8.1-1056.57~22.04.2 | USN-8567-1 |
| Ubuntu Pro FIPS-updates 24.04 LTS | linux-aws-fips | 6.8.0-1061.64+fips1 | USN-8595-3 |
| Ubuntu Pro FIPS-updates 24.04 LTS | linux-azure-fips | 6.8.0-1063.71+fips2 | USN-8608-1 |
| Ubuntu Pro FIPS-updates 24.04 LTS | linux-fips | 6.8.0-136.136+fips2 | USN-8574-2 |
| Ubuntu Pro FIPS-updates 24.04 LTS | linux-gcp-fips | 6.8.0-1064.72+fips1 | USN-8574-1 |
SUSE
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| SLES for SAP 16.0 | kernel-64kb +8 | 6.12.0-160000.35.1 | SUSE-SU-2026:22127-1 |
| SLES for SAP 16.0 | kernel-default-base | 6.12.0-160000.35.1.160000.2.16 | SUSE-SU-2026:22127-1 |
| SLES 16.0 | kernel-64kb +8 | 6.12.0-160000.35.1 | SUSE-SU-2026:22127-1, SUSE-SU-2026:22099-1 |
| SLES 16.0 | kernel-default-base | 6.12.0-160000.35.1.160000.2.16 | SUSE-SU-2026:22127-1 |
| SLE Micro 6.2 | kernel-default-base | 6.12.0-160000.35.1.160000.2.16 | SUSE-SU-2026:22112-1 |
| SLE Micro 6.2 | kernel-rt +5 | 6.12.0-160000.35.1 | SUSE-SU-2026:22117-1, SUSE-SU-2026:22112-1 |
openSUSE
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| openSUSE Leap 16.0 | kernel-default-base | 6.12.0-160000.35.1.160000.2.16 | openSUSE-SU-2026:20965-1 |
| openSUSE Leap 16.0 | kernel-rt +11 | 6.12.0-160000.35.1 | openSUSE-SU-2026:20965-1 |
Amazon Linux
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Amazon Linux 2023 | kernel-livepatch-6.18.25-55.108 +1 | 1:1.0-0.amzn2023 | ALAS2023-2026-1695, ALAS2023-2026-1693 |
| Amazon Linux 2023 | perf6.12 +11 | 1:6.12.83-113.160.amzn2023 | ALAS2023-2026-1695 |
| Amazon Linux 2023 | perf6.18 +11 | 1:6.18.25-55.108.amzn2023 | ALAS2023-2026-1693 |
Azure Linux
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Azure Linux 3 | kernel | 6.6.137.1-1 | — |
Oracle Linux
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Oracle Linux 9 | kernel-uek +34 | 6.12.0-204.92.4.2.el10uek | ELSA-2026-50372 |
Advisories 23
- USN-8574-2 linux-fips, linux-lowlatency, linux-lowlatency-hwe-6.8, linux-oracle vulnerabilities Ubuntu Security Notices (USN) · Nov 13, 2026
- USN-8596-1 linux-nvidia, linux-nvidia-6.8, linux-nvidia-lowlatency vulnerabilities Ubuntu Security Notices (USN) · Nov 13, 2026
- USN-8607-1 linux-azure-fde vulnerabilities Ubuntu Security Notices (USN) · Nov 13, 2026
- USN-8608-1 linux-azure-fips vulnerabilities Ubuntu Security Notices (USN) · Nov 13, 2026
- USN-8595-1 linux-oracle-6.8 vulnerabilities Ubuntu Security Notices (USN) · Nov 13, 2026
- USN-8595-3 linux-aws-6.8, linux-aws-fips vulnerabilities Ubuntu Security Notices (USN) · Nov 13, 2026
- USN-8609-1 linux-azure-fde-6.8 vulnerabilities Ubuntu Security Notices (USN) · Nov 13, 2026
- USN-8595-2 linux-aws vulnerabilities Ubuntu Security Notices (USN) · Nov 13, 2026
- USN-8574-1 linux-gcp-fips vulnerabilities Ubuntu Security Notices (USN) · Nov 13, 2026
- USN-8574-3 linux-ibm, linux-ibm-6.8, linux-nvidia-tegra, linux-xilinx vulnerabilities Ubuntu Security Notices (USN) · Nov 13, 2026
- USN-8619-1 linux-hwe-6.8 vulnerabilities Ubuntu Security Notices (USN) · Nov 13, 2026
- USN-8665-1 linux-raspi, linux-raspi-realtime vulnerabilities Ubuntu Security Notices (USN) · Nov 13, 2026
- USN-8606-1 linux-azure, linux-azure-6.8 vulnerabilities Ubuntu Security Notices (USN) · Nov 13, 2026
- WID-SEC-2026-1279 Linux Kernel: Mehrere Schwachstellen BSI CERT-Bund (WID) · Nov 12, 2026
- USN-8567-1 linux, linux-gcp, linux-gcp-6.8, linux-gke, linux-gkeop, linux-realtime, linux-realtime-6.8 vulnerabilities Ubuntu Security Notices (USN) · Nov 7, 2026
- SUSE-SU-2026:22117-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Jul 9, 2026
- ELSA-2026-50372 Important: Unbreakable Enterprise kernel security update (Oracle Linux 9) Oracle Linux Security Advisories (ELSA) · Jul 2, 2026
- openSUSE-SU-2026:20965-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Jun 24, 2026
- SUSE-SU-2026:22127-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Jun 17, 2026
- SUSE-SU-2026:22112-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Jun 17, 2026
- SUSE-SU-2026:22099-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Jun 17, 2026
- ALAS2023-2026-1693 Important: kernel6.18 security update (Amazon Linux 2023) Amazon Linux Security Center (ALAS) · May 19, 2026
- ALAS2023-2026-1695 Important: kernel6.12 security update (Amazon Linux 2023) Amazon Linux Security Center (ALAS) · May 19, 2026
References
- https://git.kernel.org/stable/c/88591194df736a508dd5461ab2167a61e98caac1
- https://git.kernel.org/stable/c/633ab680c405ac390e6bec5b74aaf46197c837b6
- https://git.kernel.org/stable/c/576543bedd616254032d4ebe54a90076f9e31740
- https://git.kernel.org/stable/c/9316a820b9aae07d44469d6485376dad824c5b3f
- https://git.kernel.org/stable/c/f58df566524ebcdfa394329c64f47e3c9257516e