In the Linux kernel, the following vulnerability has been resolved:
uprobes: Reject the shared zeropage in uprobe_write_opcode()
We triggered the following crash in syzkaller tests:
BUG: Bad page state in process syz.7.38 pfn:1eff3 page: refcount:0 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x1eff3 flags: 0x3fffff00004004(referenced|reserved|node=0|zone=1|lastcpupid=0x1fffff) raw: 003fffff00004004 ffffe6c6c07bfcc8 ffffe6c6c07bfcc8 0000000000000000 raw: 0000000000000000 0000000000000000 00000000fffffffe 0000000000000000 page dumped because: PAGE_FLAGS_CHECK_AT_FREE flag(s) set Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1ubuntu1.1 04/01/2014 Call Trace: <TASK> dump_stack_lvl+0x32/0x50 bad_page+0x69/0xf0 free_unref_page_prepare+0x401/0x500 free_unref_page+0x6d/0x1b0 uprobe_write_opcode+0x460/0x8e0 install_breakpoint.part.0+0x51/0x80 register_for_each_vma+0x1d9/0x2b0 __uprobe_register+0x245/0x300 bpf_uprobe_multi_link_attach+0x29b/0x4f0 link_create+0x1e2/0x280 __sys_bpf+0x75f/0xac0 __x64_sys_bpf+0x1a/0x30 do_syscall_64+0x56/0x100 entry_SYSCALL_64_after_hwframe+0x78/0xe2
BUG: Bad rss-counter state mm:00000000452453e0 type:MM_FILEPAGES val:-1
The following syzkaller test case can be used to reproduce:
r2 = creat(&(0x7f0000000000)='./file0\x00', 0x8) write$nbd(r2, &(0x7f0000000580)=ANY=[], 0x10) r4 = openat(0xffffffffffffff9c, &(0x7f0000000040)='./file0\x00', 0x42, 0x0) mmap$IORING_OFF_SQ_RING(&(0x7f0000ffd000/0x3000)=nil, 0x3000, 0x0, 0x12, r4, 0x0) r5 = userfaultfd(0x80801) ioctl$UFFDIO_API(r5, 0xc018aa3f, &(0x7f0000000040)={0xaa, 0x20}) r6 = userfaultfd(0x80801) ioctl$UFFDIO_API(r6, 0xc018aa3f, &(0x7f0000000140)) ioctl$UFFDIO_REGISTER(r6, 0xc020aa00, &(0x7f0000000100)={{&(0x7f0000ffc000/0x4000)=nil, 0x4000}, 0x2}) ioctl$UFFDIO_ZEROPAGE(r5, 0xc020aa04, &(0x7f0000000000)={{&(0x7f0000ffd000/0x1000)=nil, 0x1000}}) r7 = bpf$PROG_LOAD(0x5, &(0x7f0000000140)={0x2, 0x3, &(0x7f0000000200)=ANY=[@ANYBLOB="1800000000120000000000000000000095"], &(0x7f0000000000)='GPL\x00', 0x7, 0x0, 0x0, 0x0, 0x0, '\x00', 0x0, @fallback=0x30, 0xffffffffffffffff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10, 0x0, @void, @value}, 0x94) bpf$BPF_LINK_CREATE_XDP(0x1c, &(0x7f0000000040)={r7, 0x0, 0x30, 0x1e, @val=@uprobe_multi={&(0x7f0000000080)='./file0\x00', &(0x7f0000000100)=[0x2], 0x0, 0x0, 0x1}}, 0x40)
The cause is that zero pfn is set to the PTE without increasing the RSS count in mfill_atomic_pte_zeropage() and the refcount of zero folio does not increase accordingly. Then, the operation on the same pfn is performed in uprobe_write_opcode()->__replace_page() to unconditional decrease the RSS count and old_folio's refcount.
Therefore, two bugs are introduced:
1. The RSS count is incorrect, when process exit, the check_mm() report error "Bad rss-count".
2. The reserved folio (zero folio) is freed when folio->refcount is zero, then free_pages_prepare->free_page_is_bad() report error "Bad page state".
There is more, the following warning could also theoretically be triggered:
__replace_page() -> ... -> folio_remove_rmap_pte() -> VM_WARN_ON_FOLIO(is_zero_folio(folio), folio)
Considering that uprobe hit on the zero folio is a very rare case, just reject zero old folio immediately after get_user_page_vma_remote().
[ mingo: Cleaned up the changelog ]
CVSS Details
- CVSS 3.1 Base Score: 5.5
- CVSS 3.1 Vector: (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H)
Covered by Rapid7
| Product | Vendor Advisory | Solution File | Added | Published |
|---|---|---|---|---|
| Amazon_linux_2023 | — | Upgrade perf-debuginfoUpgrade kernel-debuginfoUpgrade kernel-tools-develUpgrade kernel-tools-debuginfoUpgrade kernelUpgrade python3-perfUpgrade kernel-modules-extraUpgrade kernel-livepatch-6.1.130-139.222Upgrade kernel-headersUpgrade kernel-debuginfo-common-x86_64Upgrade kernel-libbpfUpgrade kernel-libbpf-develUpgrade bpftoolUpgrade python3-perf-debuginfoUpgrade bpftool-debuginfoUpgrade kernel-libbpf-staticUpgrade kernel-debuginfo-common-aarch64Upgrade kernel-toolsUpgrade kernel-modules-extra-commonUpgrade perfUpgrade kernel-devel | Jun 11, 2025 | Mar 27, 2025 |
| Debian | — | Upgrade linux-6.1Upgrade linux | Apr 14, 2025 | Mar 27, 2025 |
| Huawei Euleros 2_0_sp11 | — | Upgrade bpftoolUpgrade kernel-tools-libsUpgrade python3-perfUpgrade kernel-abi-stablelistsUpgrade kernel-toolsUpgrade kernel | Jun 13, 2025 | Mar 27, 2025 |
| Huawei Euleros 2_0_sp12 | — | Upgrade kernel-tools-libsUpgrade kernel-toolsUpgrade kernel-abi-stablelistsUpgrade bpftoolUpgrade kernelUpgrade python3-perf | Jul 21, 2025 | Mar 27, 2025 |
| Huawei Euleros 2_0_sp13 | — | Upgrade kernelUpgrade python3-perfUpgrade kernel-tools-libsUpgrade kernel-toolsUpgrade bpftoolUpgrade kernel-abi-stablelists | Jul 1, 2025 | Mar 27, 2025 |
| Redhat_linux | — | No solution exists | Jul 9, 2025 | Mar 27, 2025 |
| Suse | — | Upgrade kernel-source-azureUpgrade ocfs2-kmp-azureUpgrade dtb-appleUpgrade cluster-md-kmp-defaultUpgrade cluster-md-kmp-rtUpgrade kernel-64kbUpgrade kernel-debugUpgrade dtb-renesasUpgrade kernel-default-livepatch-develUpgrade kernel-64kb-develUpgrade kernel-default-extraUpgrade dtb-hisiliconUpgrade kernel-default-vdsoUpgrade dtb-mediatekUpgrade kernel-develUpgrade dtb-xilinxUpgrade kernel-debug-develUpgrade kernel-devel-rtUpgrade kernel-syms-azureUpgrade kernel-kvmsmallUpgrade kernel-macrosUpgrade kernel-64kb-optionalUpgrade kernel-devel-azureUpgrade reiserfs-kmp-rtUpgrade dtb-apmUpgrade dtb-exynosUpgrade reiserfs-kmp-defaultUpgrade kernel-default-optionalUpgrade dlm-kmp-defaultUpgrade kernel-default-develUpgrade kselftests-kmp-defaultUpgrade reiserfs-kmp-azureUpgrade dlm-kmp-azureUpgrade kernel-docsUpgrade dtb-amazonUpgrade kernel-obs-qaUpgrade dtb-amdUpgrade kernel-kvmsmall-develUpgrade kernel-zfcpdumpUpgrade dtb-amlogicUpgrade dtb-armUpgrade kernel-rt_debug-vdsoUpgrade kernel-sourceUpgrade cluster-md-kmp-azureUpgrade gfs2-kmp-64kbUpgrade ocfs2-kmp-rtUpgrade kernel-rt-develUpgrade kernel-symsUpgrade gfs2-kmp-rtUpgrade kernel-rtUpgrade dtb-sprdUpgrade dtb-caviumUpgrade kselftests-kmp-azureUpgrade kernel-azure-develUpgrade gfs2-kmp-defaultUpgrade dtb-qcomUpgrade kernel-docs-htmlUpgrade dtb-freescaleUpgrade reiserfs-kmp-64kbUpgrade kernel-rt_debugUpgrade kernel-kvmsmall-vdsoUpgrade kernel-default-base-rebuildUpgrade kernel-azure-extraUpgrade kselftests-kmp-64kbUpgrade kernel-default-baseUpgrade gfs2-kmp-azureUpgrade dtb-rockchipUpgrade dtb-marvellUpgrade kernel-rt-livepatch-develUpgrade kernel-defaultUpgrade kernel-azureUpgrade dtb-alteraUpgrade kselftests-kmp-rtUpgrade kernel-source-rtUpgrade dtb-nvidiaUpgrade kernel-rt-optionalUpgrade ocfs2-kmp-64kbUpgrade kernel-rt-vdsoUpgrade dtb-broadcomUpgrade ocfs2-kmp-defaultUpgrade kernel-obs-buildUpgrade kernel-debug-vdsoUpgrade cluster-md-kmp-64kbUpgrade kernel-rt_debug-develUpgrade dtb-lgUpgrade dlm-kmp-64kbUpgrade kernel-default-livepatchUpgrade kernel-azure-optionalUpgrade kernel-azure-vdsoUpgrade dtb-socionextUpgrade kernel-source-vanillaUpgrade dtb-allwinnerUpgrade kernel-64kb-extraUpgrade kernel-default-manUpgrade kernel-syms-rtUpgrade kernel-rt-extraUpgrade dlm-kmp-rt | Dec 5, 2025 | May 20, 2025 |
| Ubuntu | — | Upgrade linux-image-awsUpgrade linux-image-aws-64kUpgrade linux-image-6.11.0-26-genericUpgrade linux-image-aws-lts-24.04Upgrade linux-image-aws-64k-lts-24.04Upgrade linux-image-azure-6.8Upgrade linux-image-6.8.0-84-lowlatencyUpgrade linux-image-gkeUpgrade linux-image-6.8.0-1036-gke-64kUpgrade linux-image-gcp-lts-24.04Upgrade linux-image-gcp-64kUpgrade linux-image-6.11.0-1014-lowlatency-64kUpgrade linux-image-6.8.0-1040-gcp-64kUpgrade linux-image-gcp-64k-6.8Upgrade linux-image-generic-64k-hwe-22.04Upgrade linux-image-6.8.0-1039-aws-64kUpgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-6.8.0-1037-oracle-64kUpgrade linux-image-gcp-6.8Upgrade linux-image-nvidia-64kUpgrade linux-image-gke-64k-6.8Upgrade linux-image-nvidia-lowlatency-64k-6.8Upgrade linux-image-nvidia-64k-6.8Upgrade linux-image-realtimeUpgrade linux-image-6.8.0-1038-azureUpgrade linux-image-ibm-lts-24.04Upgrade linux-image-6.11.0-1015-gcpUpgrade linux-image-lowlatency-64k-6.8Upgrade linux-image-lowlatency-6.8Upgrade linux-image-oem-22.04dUpgrade linux-image-6.8.0-1036-azure-fdeUpgrade linux-image-6.8.0-85-genericUpgrade linux-image-kvmUpgrade linux-image-generic-hwe-24.04Upgrade linux-image-virtualUpgrade linux-image-raspi-6.8Upgrade linux-image-6.11.0-1016-oracle-64kUpgrade linux-image-oracleUpgrade linux-image-nvidia-6.8Upgrade linux-image-6.8.0-85-generic-64kUpgrade linux-image-azure-fde-6.8Upgrade linux-image-generic-hwe-22.04Upgrade linux-image-6.8.0-1039-nvidia-64kUpgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-oracle-64kUpgrade linux-image-oracle-6.8Upgrade linux-image-nvidia-hwe-22.04Upgrade linux-image-realtime-6.8.1Upgrade linux-image-6.11.0-1014-lowlatencyUpgrade linux-image-lowlatency-64k-hwe-24.04Upgrade linux-image-6.8.0-84-lowlatency-64kUpgrade linux-image-6.11.0-1015-azure-fdeUpgrade linux-image-azureUpgrade linux-image-aws-6.8Upgrade linux-image-gke-64kUpgrade linux-image-6.8.0-84-generic-64kUpgrade linux-image-aws-64k-6.8Upgrade linux-image-lowlatency-64kUpgrade linux-image-6.11.0-1022-oemUpgrade linux-image-lowlatency-64k-hwe-22.04Upgrade linux-image-6.8.1-1034-realtimeUpgrade linux-image-oracle-64k-6.8Upgrade linux-image-oracle-64k-lts-24.04Upgrade linux-image-ibm-6.8Upgrade linux-image-6.8.0-1025-azure-nvidiaUpgrade linux-image-6.8.0-84-genericUpgrade linux-image-6.11.0-1016-oracleUpgrade linux-image-6.11.0-1013-raspiUpgrade linux-image-gke-6.8Upgrade linux-image-gcp-64k-lts-24.04Upgrade linux-image-6.8.0-1040-gcpUpgrade linux-image-generic-lpaeUpgrade linux-image-generic-6.8Upgrade linux-image-6.8.0-1039-nvidia-lowlatency-64kUpgrade linux-image-6.8.0-1039-awsUpgrade linux-image-6.8.0-1037-oracleUpgrade linux-image-6.8.0-1036-gkeUpgrade linux-image-6.8.0-1036-azureUpgrade linux-image-oem-22.04Upgrade linux-image-lowlatencyUpgrade linux-image-ibmUpgrade linux-image-gkeopUpgrade linux-image-azure-nvidia-6.8Upgrade linux-image-virtual-hwe-22.04Upgrade linux-image-virtual-hwe-24.04Upgrade linux-image-6.11.0-1015-gcp-64kUpgrade linux-image-6.8.0-1039-raspiUpgrade linux-image-6.8.0-1037-ibmUpgrade linux-image-6.11.0-26-generic-64kUpgrade linux-image-oem-24.04bUpgrade linux-image-oem-22.04aUpgrade linux-image-azure-nvidiaUpgrade linux-image-6.8.0-1038-azure-fdeUpgrade linux-image-raspi-realtimeUpgrade linux-image-6.8.0-1039-nvidiaUpgrade linux-image-6.11.0-1010-realtimeUpgrade linux-image-azure-fdeUpgrade linux-image-oracle-lts-24.04Upgrade linux-image-azure-nvidia-lts-24.04Upgrade linux-image-azure-fde-lts-24.04Upgrade linux-image-nvidiaUpgrade linux-image-raspiUpgrade linux-image-ibm-classicUpgrade linux-image-nvidia-lowlatency-6.8Upgrade linux-image-generic-64k-6.8Upgrade linux-image-gcpUpgrade linux-image-6.11.0-1015-azureUpgrade linux-image-realtime-hwe-22.04Upgrade linux-image-oem-22.04cUpgrade linux-image-lowlatency-hwe-24.04Upgrade linux-image-azure-lts-24.04Upgrade linux-image-generic-64kUpgrade linux-image-6.11.0-1014-awsUpgrade linux-image-virtual-6.8Upgrade linux-image-oem-22.04bUpgrade linux-image-gkeop-6.8Upgrade linux-image-raspi-realtime-6.8Upgrade linux-image-genericUpgrade linux-image-6.8.0-1039-nvidia-lowlatencyUpgrade linux-image-6.8.0-1023-gkeopUpgrade linux-image-lowlatency-hwe-22.04Upgrade linux-image-nvidia-lowlatencyUpgrade linux-image-nvidia-64k-hwe-22.04Upgrade linux-image-6.8.0-2031-raspi-realtime | May 21, 2025 | Mar 27, 2025 |
| Vmware Photon_os | — | Use 'tdnf update' to upgrade all packages to the latest version. | Oct 10, 2025 | Mar 27, 2025 |
Prioritise with Active Threat Intelligence
With curated Threat Intelligence, you can see which vulnerabilities truly put you at risk, prioritize what matters most, and act before attackers do.
Explore Intelligence Hub