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