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