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