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-modules-extraUpgrade kernel-tools-develUpgrade kernelUpgrade kernel-debuginfoUpgrade kernel-debuginfo-common-x86_64Upgrade python3-perfUpgrade kernel-libbpfUpgrade kernel-headersUpgrade kernel-libbpf-develUpgrade kernel-tools-debuginfoUpgrade kernel-livepatch-6.1.130-139.222Upgrade kernel-debuginfo-common-aarch64Upgrade bpftoolUpgrade python3-perf-debuginfoUpgrade kernel-toolsUpgrade perfUpgrade kernel-modules-extra-commonUpgrade kernel-develUpgrade bpftool-debuginfoUpgrade kernel-libbpf-static | Jun 11, 2025 | Mar 27, 2025 |
| Debian | — | Upgrade linuxUpgrade linux-6.1 | Apr 14, 2025 | Mar 27, 2025 |
| Huawei Euleros 2_0_sp11 | — | Upgrade bpftoolUpgrade kernel-tools-libsUpgrade kernel-abi-stablelistsUpgrade python3-perfUpgrade kernelUpgrade kernel-tools | Jun 13, 2025 | Mar 27, 2025 |
| Huawei Euleros 2_0_sp12 | — | Upgrade kernelUpgrade bpftoolUpgrade python3-perfUpgrade kernel-tools-libsUpgrade kernel-toolsUpgrade kernel-abi-stablelists | Jul 21, 2025 | Mar 27, 2025 |
| Huawei Euleros 2_0_sp13 | — | Upgrade python3-perfUpgrade kernelUpgrade kernel-abi-stablelistsUpgrade kernel-tools-libsUpgrade bpftoolUpgrade kernel-tools | Jul 1, 2025 | Mar 27, 2025 |
| Redhat_linux | — | No solution exists | Jul 9, 2025 | Mar 27, 2025 |
| Suse | — | Upgrade gfs2-kmp-azureUpgrade kernel-kvmsmall-vdsoUpgrade kernel-defaultUpgrade kernel-rt-livepatch-develUpgrade kernel-azureUpgrade dtb-alteraUpgrade kernel-rt_debugUpgrade kernel-azure-extraUpgrade kernel-default-base-rebuildUpgrade kernel-source-rtUpgrade kselftests-kmp-64kbUpgrade dtb-socionextUpgrade kernel-source-vanillaUpgrade dlm-kmp-64kbUpgrade kernel-azure-vdsoUpgrade kernel-rt_debug-develUpgrade kselftests-kmp-rtUpgrade reiserfs-kmp-64kbUpgrade kselftests-kmp-azureUpgrade dtb-lgUpgrade dtb-allwinnerUpgrade kernel-default-livepatchUpgrade kernel-azure-develUpgrade dtb-caviumUpgrade dtb-qcomUpgrade dtb-sprdUpgrade kernel-obs-buildUpgrade cluster-md-kmp-64kbUpgrade kernel-docs-htmlUpgrade gfs2-kmp-defaultUpgrade kernel-azure-optionalUpgrade dtb-freescaleUpgrade kernel-default-manUpgrade kernel-rt-extraUpgrade kernel-64kb-extraUpgrade kernel-syms-rtUpgrade dtb-nvidiaUpgrade dtb-rockchipUpgrade dlm-kmp-rtUpgrade kernel-rtUpgrade ocfs2-kmp-64kbUpgrade dtb-broadcomUpgrade kernel-default-baseUpgrade kernel-rt-optionalUpgrade kernel-rt-vdsoUpgrade dtb-marvellUpgrade kernel-debug-vdsoUpgrade ocfs2-kmp-defaultUpgrade cluster-md-kmp-defaultUpgrade kernel-kvmsmallUpgrade gfs2-kmp-rtUpgrade dlm-kmp-defaultUpgrade kselftests-kmp-defaultUpgrade kernel-64kbUpgrade gfs2-kmp-64kbUpgrade kernel-sourceUpgrade kernel-rt_debug-vdsoUpgrade kernel-rt-develUpgrade dtb-amlogicUpgrade dtb-renesasUpgrade dtb-apmUpgrade kernel-64kb-optionalUpgrade dtb-xilinxUpgrade cluster-md-kmp-rtUpgrade kernel-debug-develUpgrade kernel-devel-rtUpgrade kernel-symsUpgrade dtb-hisiliconUpgrade kernel-obs-qaUpgrade kernel-docsUpgrade kernel-default-livepatch-develUpgrade kernel-debugUpgrade dtb-appleUpgrade ocfs2-kmp-azureUpgrade kernel-syms-azureUpgrade kernel-source-azureUpgrade cluster-md-kmp-azureUpgrade ocfs2-kmp-rtUpgrade kernel-zfcpdumpUpgrade kernel-kvmsmall-develUpgrade dtb-mediatekUpgrade kernel-develUpgrade kernel-default-vdsoUpgrade reiserfs-kmp-defaultUpgrade kernel-devel-azureUpgrade dtb-amdUpgrade dtb-armUpgrade reiserfs-kmp-azureUpgrade kernel-default-develUpgrade dtb-amazonUpgrade dtb-exynosUpgrade dlm-kmp-azureUpgrade kernel-default-extraUpgrade reiserfs-kmp-rtUpgrade kernel-default-optionalUpgrade kernel-macrosUpgrade kernel-64kb-devel | Dec 5, 2025 | May 20, 2025 |
| Ubuntu | — | Upgrade linux-image-gcpUpgrade linux-image-6.8.0-1023-gkeopUpgrade linux-image-6.8.0-1039-nvidia-lowlatencyUpgrade linux-image-genericUpgrade linux-image-ibmUpgrade linux-image-raspi-realtime-6.8Upgrade linux-image-oem-22.04Upgrade linux-image-nvidia-lowlatency-6.8Upgrade linux-image-aws-64k-6.8Upgrade linux-image-6.11.0-1015-azureUpgrade linux-image-lowlatency-hwe-22.04Upgrade linux-image-nvidia-64k-hwe-22.04Upgrade linux-image-realtime-hwe-22.04Upgrade linux-image-6.8.0-2031-raspi-realtimeUpgrade linux-image-oem-22.04cUpgrade linux-image-oracle-lts-24.04Upgrade linux-image-ibm-6.8Upgrade linux-image-raspiUpgrade linux-image-lowlatencyUpgrade linux-image-lowlatency-hwe-24.04Upgrade linux-image-6.8.0-1025-azure-nvidiaUpgrade linux-image-generic-64kUpgrade linux-image-azure-fdeUpgrade linux-image-nvidiaUpgrade linux-image-generic-6.8Upgrade linux-image-generic-64k-6.8Upgrade linux-image-gkeopUpgrade linux-image-6.8.0-84-generic-64kUpgrade linux-image-gke-6.8Upgrade linux-image-6.8.0-1039-nvidiaUpgrade linux-image-nvidia-lowlatencyUpgrade linux-image-oem-22.04aUpgrade linux-image-generic-lpaeUpgrade linux-image-6.11.0-1010-realtimeUpgrade linux-image-6.8.0-1039-awsUpgrade linux-image-azure-lts-24.04Upgrade linux-image-6.8.0-1036-azureUpgrade linux-image-6.8.0-1037-oracleUpgrade linux-image-lowlatency-64kUpgrade linux-image-6.8.0-1039-nvidia-lowlatency-64kUpgrade linux-image-6.8.0-1036-gkeUpgrade linux-image-6.11.0-1015-azure-fdeUpgrade linux-image-azure-nvidia-6.8Upgrade linux-image-6.8.0-1038-azure-fdeUpgrade linux-image-azureUpgrade linux-image-gke-64kUpgrade linux-image-aws-6.8Upgrade linux-image-6.11.0-1014-awsUpgrade linux-image-virtual-6.8Upgrade linux-image-raspi-realtimeUpgrade linux-image-ibm-classicUpgrade linux-image-oracle-64k-6.8Upgrade linux-image-azure-nvidia-lts-24.04Upgrade linux-image-lowlatency-64k-hwe-22.04Upgrade linux-image-6.8.0-84-lowlatency-64kUpgrade linux-image-lowlatency-64k-hwe-24.04Upgrade linux-image-virtual-hwe-22.04Upgrade linux-image-virtual-hwe-24.04Upgrade linux-image-6.11.0-1013-raspiUpgrade linux-image-6.11.0-1015-gcp-64kUpgrade linux-image-6.11.0-1016-oracleUpgrade linux-image-6.11.0-26-generic-64kUpgrade linux-image-oem-24.04bUpgrade linux-image-azure-nvidiaUpgrade linux-image-azure-fde-lts-24.04Upgrade linux-image-6.8.0-1040-gcpUpgrade linux-image-6.11.0-1022-oemUpgrade linux-image-6.8.0-84-genericUpgrade linux-image-gkeop-6.8Upgrade linux-image-gcp-64k-lts-24.04Upgrade linux-image-6.8.0-1037-ibmUpgrade linux-image-6.8.0-1039-raspiUpgrade linux-image-oem-22.04bUpgrade linux-image-oracle-64k-lts-24.04Upgrade linux-image-6.8.1-1034-realtimeUpgrade linux-image-6.11.0-26-genericUpgrade linux-image-realtime-6.8.1Upgrade linux-image-oracleUpgrade linux-image-generic-hwe-22.04Upgrade linux-image-6.8.0-84-lowlatencyUpgrade linux-image-aws-64kUpgrade linux-image-awsUpgrade linux-image-azure-6.8Upgrade linux-image-6.11.0-1015-gcpUpgrade linux-image-oracle-6.8Upgrade linux-image-raspi-6.8Upgrade linux-image-nvidia-6.8Upgrade linux-image-generic-hwe-24.04Upgrade linux-image-virtualUpgrade linux-image-gkeUpgrade linux-image-gcp-64kUpgrade linux-image-oracle-64kUpgrade linux-image-nvidia-lowlatency-64k-6.8Upgrade linux-image-kvmUpgrade linux-image-6.11.0-1014-lowlatencyUpgrade linux-image-azure-fde-6.8Upgrade linux-image-aws-64k-lts-24.04Upgrade linux-image-generic-64k-hwe-24.04Upgrade linux-image-6.8.0-1036-gke-64kUpgrade linux-image-nvidia-hwe-22.04Upgrade linux-image-generic-64k-hwe-22.04Upgrade linux-image-6.8.0-1036-azure-fdeUpgrade linux-image-6.8.0-1039-nvidia-64kUpgrade linux-image-6.8.0-85-generic-64kUpgrade linux-image-6.8.0-85-genericUpgrade linux-image-6.11.0-1016-oracle-64kUpgrade linux-image-6.11.0-1014-lowlatency-64kUpgrade linux-image-gcp-64k-6.8Upgrade linux-image-nvidia-lowlatency-64kUpgrade linux-image-nvidia-64kUpgrade linux-image-6.8.0-1039-aws-64kUpgrade linux-image-6.8.0-1037-oracle-64kUpgrade linux-image-gcp-lts-24.04Upgrade linux-image-6.8.0-1040-gcp-64kUpgrade linux-image-nvidia-64k-6.8Upgrade linux-image-6.8.0-1038-azureUpgrade linux-image-oem-22.04dUpgrade linux-image-lowlatency-64k-6.8Upgrade linux-image-ibm-lts-24.04Upgrade linux-image-lowlatency-6.8Upgrade linux-image-realtimeUpgrade linux-image-aws-lts-24.04Upgrade linux-image-gke-64k-6.8Upgrade linux-image-gcp-6.8 | 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