Description
In the Linux kernel, the following vulnerability has been resolved:
fs/proc: task_mmu.c: don't read mapcount for migration entry
The syzbot reported the below BUG:
kernel BUG at include/linux/page-flags.h:785!
invalid opcode: 0000 [#1] PREEMPT SMP KASAN
CPU: 1 PID: 4392 Comm: syz-executor560 Not tainted 5.16.0-rc6-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
RIP: 0010:PageDoubleMap include/linux/page-flags.h:785 [inline]
RIP: 0010:__page_mapcount+0x2d2/0x350 mm/util.c:744
Call Trace:
page_mapcount include/linux/mm.h:837 [inline]
smaps_account+0x470/0xb10 fs/proc/task_mmu.c:466
smaps_pte_entry fs/proc/task_mmu.c:538 [inline]
smaps_pte_range+0x611/0x1250 fs/proc/task_mmu.c:601
walk_pmd_range mm/pagewalk.c:128 [inline]
walk_pud_range mm/pagewalk.c:205 [inline]
walk_p4d_range mm/pagewalk.c:240 [inline]
walk_pgd_range mm/pagewalk.c:277 [inline]
__walk_page_range+0xe23/0x1ea0 mm/pagewalk.c:379
walk_page_vma+0x277/0x350 mm/pagewalk.c:530
smap_gather_stats.part.0+0x148/0x260 fs/proc/task_mmu.c:768
smap_gather_stats fs/proc/task_mmu.c:741 [inline]
show_smap+0xc6/0x440 fs/proc/task_mmu.c:822
seq_read_iter+0xbb0/0x1240 fs/seq_file.c:272
seq_read+0x3e0/0x5b0 fs/seq_file.c:162
vfs_read+0x1b5/0x600 fs/read_write.c:479
ksys_read+0x12d/0x250 fs/read_write.c:619
do_syscall_x64 arch/x86/entry/common.c:50 [inline]
do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
entry_SYSCALL_64_after_hwframe+0x44/0xae
The reproducer was trying to read /proc/$PID/smaps when calling
MADV_FREE at the mean time. MADV_FREE may split THPs if it is called
for partial THP. It may trigger the below race:
CPU A CPU B
----- -----
smaps walk: MADV_FREE:
page_mapcount()
PageCompound()
split_huge_page()
page = compound_head(page)
PageDoubleMap(page)
When calling PageDoubleMap() this page is not a tail page of THP anymore
so the BUG is triggered.
This could be fixed by elevated refcount of the page before calling
mapcount, but that would prevent it from counting migration entries, and
it seems overkilling because the race just could happen when PMD is
split so all PTE entries of tail pages are actually migration entries,
and smaps_account() does treat migration entries as mapcount == 1 as
Kirill pointed out.
Add a new parameter for smaps_account() to tell this entry is migration
entry then skip calling page_mapcount(). Don't skip getting mapcount
for device private entries since they do track references with mapcount.
Pagemap also has the similar issue although it was not reported. Fixed
it as well.
[shy828301@gmail.com: v4]
[nathan@kernel.org: avoid unused variable warning in pagemap_pmd_range()]
Affected products
| Vendor | Product | Affected | Fixed |
|---|---|---|---|
| Linux | Linux | 4.5 | 5.10.102 |
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 | 5.16.10-1 | — |
| Debian 13 | linux | 5.16.10-1 | — |
| Debian 12 | linux | 5.16.10-1 | — |
Ubuntu
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Ubuntu 24.04 LTS | linux-raspi-realtime | No fix yet | — |
| Ubuntu 22.04 LTS | linux-riscv +25 | No fix yet | — |
| Ubuntu 20.04 LTS | linux-gke +27 | No fix yet | — |
| Ubuntu 20.04 LTS | linux-intel-iotg-5.15 | 5.15.0-1008.11~20.04.1 | — |
| Ubuntu 18.04 LTS | linux-gcp +14 | No fix yet | — |
| Ubuntu 16.04 LTS | linux-hwe-edge | No fix yet | — |
Show 8 more (older releases, extended support, other products)Fewer releases
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| Ubuntu Pro FIPS 20.04 LTS | linux-fips +3 | No fix yet | — |
| Ubuntu Pro FIPS 18.04 LTS | linux-fips +3 | No fix yet | — |
| Ubuntu Pro FIPS-updates 20.04 LTS | linux-fips +3 | No fix yet | — |
| Ubuntu Pro FIPS-updates 18.04 LTS | linux-fips +3 | No fix yet | — |
| Ubuntu Pro 20.04 LTS | linux +10 | No fix yet | — |
| Ubuntu Pro 18.04 LTS | linux +12 | No fix yet | — |
| Ubuntu Pro 16.04 LTS | linux-gcp +4 | No fix yet | — |
| Ubuntu Pro 14.04 LTS | linux-azure | No fix yet | — |
SUSE
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| SLES 15 SP5 | kernel-64kb +5 | 5.14.21-150500.55.73.1 | SUSE-SU-2024:2939-1 |
| SLES 15 SP5 | kernel-azure +2 | 5.14.21-150500.33.63.1 | SUSE-SU-2024:2947-1 |
| SLES 15 SP5 | kernel-default-base | 5.14.21-150500.55.73.1.150500.6.33.8 | SUSE-SU-2024:2939-1 |
| SLES 15 SP5 | kernel-docs | 5.14.21-150500.55.73.2 | SUSE-SU-2024:2939-1 |
| SLES 15 SP4 | kernel-64kb +6 | 5.14.21-150400.24.128.1 | SUSE-SU-2024:2929-1 |
| SLES 15 SP4 | kernel-default-base | 5.14.21-150400.24.128.1.150400.24.62.1 | SUSE-SU-2024:2929-1 |
| SLES 15 SP3 | kernel-64kb +7 | 5.3.18-150300.59.174.1 | SUSE-SU-2024:3249-1 |
| SLES 15 SP3 | kernel-default-base | 5.3.18-150300.59.174.1.150300.18.103.1 | SUSE-SU-2024:3249-1 |
| SLES 15 SP2 | kernel-default-base | 5.3.18-150200.24.203.1.150200.9.105.1 | SUSE-SU-2024:3499-1 |
| SLES 15 SP2 | kernel-docs +5 | 5.3.18-150200.24.203.1 | SUSE-SU-2024:3499-1 |
Show 19 more (older releases, extended support, other products)Fewer releases
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| SLES for SAP 15 SP4 | kernel-default-base | 5.14.21-150400.24.128.1.150400.24.62.1 | SUSE-SU-2024:2929-1 |
| SLES for SAP 15 SP4 | kernel-docs +4 | 5.14.21-150400.24.128.1 | SUSE-SU-2024:2929-1 |
| SLES for SAP 15 SP3 | kernel-default-base | 5.3.18-150300.59.174.1.150300.18.103.1 | SUSE-SU-2024:3249-1 |
| SLES for SAP 15 SP3 | kernel-docs +5 | 5.3.18-150300.59.174.1 | SUSE-SU-2024:3249-1 |
| SLES for SAP 15 SP2 | kernel-default-base | 5.3.18-150200.24.203.1.150200.9.105.1 | SUSE-SU-2024:3499-1 |
| SLES for SAP 15 SP2 | kernel-docs +5 | 5.3.18-150200.24.203.1 | SUSE-SU-2024:3499-1 |
| SLE Micro 5.5 | kernel-default | 5.14.21-150500.55.73.1 | SUSE-SU-2024:2939-1 |
| SLE Micro 5.5 | kernel-default-base | 5.14.21-150500.55.73.1.150500.6.33.8 | SUSE-SU-2024:2939-1 |
| SLE Micro 5.5 | kernel-rt +1 | 5.14.21-150500.13.64.1 | SUSE-SU-2024:2894-1 |
| SLE Micro 5.4 | kernel-default | 5.14.21-150400.24.128.1 | SUSE-SU-2024:2929-1 |
| SLE Micro 5.4 | kernel-default-base | 5.14.21-150400.24.128.1.150400.24.62.1 | SUSE-SU-2024:2929-1 |
| SLE Micro 5.4 | kernel-rt +1 | 5.14.21-150400.15.88.1 | SUSE-SU-2024:2902-1 |
| SLE Micro 5.3 | kernel-default | 5.14.21-150400.24.128.1 | SUSE-SU-2024:2929-1 |
| SLE Micro 5.3 | kernel-default-base | 5.14.21-150400.24.128.1.150400.24.62.1 | SUSE-SU-2024:2929-1 |
| SLE Micro 5.3 | kernel-rt +1 | 5.14.21-150400.15.88.1 | SUSE-SU-2024:2902-1 |
| SLE Micro 5.2 | kernel-default | 5.3.18-150300.59.174.1 | SUSE-SU-2024:3249-1 |
| SLE Micro 5.2 | kernel-default-base | 5.3.18-150300.59.174.1.150300.18.103.1 | SUSE-SU-2024:3249-1 |
| SLE Micro 5.2 | kernel-rt +1 | 5.3.18-150300.181.2 | SUSE-SU-2024:3225-1 |
| SLE Micro 5.1 | kernel-default | 5.3.18-150300.59.174.1 | SUSE-SU-2024:3249-1 |
| SLE Micro 5.1 | kernel-default-base | 5.3.18-150300.59.174.1.150300.18.103.1 | SUSE-SU-2024:3249-1 |
| SLE Micro 5.1 | kernel-rt +1 | 5.3.18-150300.181.2 | SUSE-SU-2024:3225-1 |
| SLE Live Patching 15 SP5 | kernel-default | 5.14.21-150500.55.73.1 | SUSE-SU-2024:2939-1 |
| SLE Live Patching 15 SP5 | kernel-livepatch-SLE15-SP5_Update_17 +1 | 1-150500.11.3.1 | SUSE-SU-2024:2939-1, SUSE-SU-2024:2894-1 |
| SLE Live Patching 15 SP4 | kernel-default | 5.14.21-150400.24.128.1 | SUSE-SU-2024:2929-1 |
| SLE Live Patching 15 SP4 | kernel-livepatch-SLE15-SP4_Update_29 | 1-150400.9.3.1 | SUSE-SU-2024:2929-1 |
| SLE Live Patching 15 SP3 | kernel-default | 5.3.18-150300.59.174.1 | SUSE-SU-2024:3249-1 |
| SLE Live Patching 15 SP3 | kernel-livepatch-SLE15-SP3_Update_48 | 1-150300.7.3.1 | SUSE-SU-2024:3249-1 |
| SLE Live Patching 15 SP2 | kernel-default | 5.3.18-150200.24.203.1 | SUSE-SU-2024:3499-1 |
| SLE Live Patching 15 SP2 | kernel-livepatch-SLE15-SP2_Update_52 | 1-150200.5.3.1 | SUSE-SU-2024:3499-1 |
| SLE HPC 15 SP4 | kernel-64kb +5 | 5.14.21-150400.24.128.1 | SUSE-SU-2024:2929-1 |
| SLE HPC 15 SP4 | kernel-default-base | 5.14.21-150400.24.128.1.150400.24.62.1 | SUSE-SU-2024:2929-1 |
| SLE HPC 15 SP3 | kernel-64kb +6 | 5.3.18-150300.59.174.1 | SUSE-SU-2024:3249-1 |
| SLE HPC 15 SP3 | kernel-default-base | 5.3.18-150300.59.174.1.150300.18.103.1 | SUSE-SU-2024:3249-1 |
| SLE HPC 15 SP2 | kernel-default-base | 5.3.18-150200.24.203.1.150200.9.105.1 | SUSE-SU-2024:3499-1 |
| SLE HPC 15 SP2 | kernel-docs +5 | 5.3.18-150200.24.203.1 | SUSE-SU-2024:3499-1 |
| SUSE Real Time Module 15 SP5 | kernel-rt +3 | 5.14.21-150500.13.64.1 | SUSE-SU-2024:2894-1 |
| SUSE Manager Server 4.3 | kernel-default-base | 5.14.21-150400.24.128.1.150400.24.62.1 | SUSE-SU-2024:2929-1 |
| SUSE Manager Server 4.3 | kernel-syms +3 | 5.14.21-150400.24.128.1 | SUSE-SU-2024:2929-1 |
| SUSE Manager Proxy 4.3 | kernel-default-base | 5.14.21-150400.24.128.1.150400.24.62.1 | SUSE-SU-2024:2929-1 |
| SUSE Manager Proxy 4.3 | kernel-syms +2 | 5.14.21-150400.24.128.1 | SUSE-SU-2024:2929-1 |
| SUSE Enterprise Storage 7.1 | kernel-64kb +6 | 5.3.18-150300.59.174.1 | SUSE-SU-2024:3249-1 |
| SUSE Enterprise Storage 7.1 | kernel-default-base | 5.3.18-150300.59.174.1.150300.18.103.1 | SUSE-SU-2024:3249-1 |
openSUSE
Security tracker ↗| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| openSUSE Leap 15.5 | dtb-aarch64 +9 | 5.14.21-150500.55.73.1 | SUSE-SU-2024:2939-1 |
| openSUSE Leap 15.5 | kernel-azure +2 | 5.14.21-150500.33.63.1 | SUSE-SU-2024:2947-1 |
| openSUSE Leap 15.5 | kernel-default-base | 5.14.21-150500.55.73.1.150500.6.33.8 | SUSE-SU-2024:2939-1 |
| openSUSE Leap 15.5 | kernel-docs | 5.14.21-150500.55.73.2 | SUSE-SU-2024:2939-1 |
| openSUSE Leap 15.5 | kernel-rt +3 | 5.14.21-150500.13.64.1 | SUSE-SU-2024:2894-1 |
Show 1 more (older releases, extended support, other products)Fewer releases
| Release | Package | Fixed in | Advisory |
|---|---|---|---|
| openSUSE Leap Micro 5.5 | kernel-default | 5.14.21-150500.55.73.1 | SUSE-SU-2024:2939-1 |
| openSUSE Leap Micro 5.5 | kernel-default-base | 5.14.21-150500.55.73.1.150500.6.33.8 | SUSE-SU-2024:2939-1 |
| openSUSE Leap Micro 5.5 | kernel-rt | 5.14.21-150500.13.64.1 | SUSE-SU-2024:2894-1 |
Advisories 9
- WID-SEC-2024-1625 Linux Kernel: Mehrere Schwachstellen ermöglichen nicht spezifizierten Angriff BSI CERT-Bund (WID) · Jul 27, 2026
- SUSE-SU-2024:2947-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2024:3249-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2024:2939-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2024:3225-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2024:3499-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2024:2902-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2024:2929-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · Feb 4, 2026
- SUSE-SU-2024:2894-1 Security update for the Linux Kernel SUSE / openSUSE Security Updates · May 2, 2025