Goal Reached Thanks to every supporter — we hit 100%!

Goal: 1000 CNY · Raised: 1000 CNY

100.0%

CVE-2025-21977— fbdev: hyperv_fb: Fix hang in kdump kernel when on Hyper-V Gen 2 VMs

EPSS 0.03% · P8

Affected Version Matrix 8

VendorProductVersion RangeStatus
LinuxLinuxc25a19afb81cfd73dab494ba64f9a434cf1a4499< cfffe46a994ac6d5de3b119917680ea1e9a96125affected
c25a19afb81cfd73dab494ba64f9a434cf1a4499< 2924802d35e00a36b1503a4e786f1926b2fdc1d0affected
c25a19afb81cfd73dab494ba64f9a434cf1a4499< 304386373007aaca9236a3f36afac0bbedcd2bf0affected
6.8affected
< 6.8unaffected
6.12.20≤ 6.12.*unaffected
6.13.8≤ 6.13.*unaffected
6.14≤ *unaffected
Get alerts for future matching vulnerabilitiesLog in to subscribe

I. Basic Information for CVE-2025-21977

Vulnerability Information

Have questions about the vulnerability? See if Shenlong's analysis helps!
View Shenlong Deep Dive ↗

Although we use advanced large model technology, its output may still contain inaccurate or outdated information.Shenlong tries to ensure data accuracy, but please verify and judge based on the actual situation.

Vulnerability Title
fbdev: hyperv_fb: Fix hang in kdump kernel when on Hyper-V Gen 2 VMs
Source: NVD (National Vulnerability Database)
Vulnerability Description
In the Linux kernel, the following vulnerability has been resolved: fbdev: hyperv_fb: Fix hang in kdump kernel when on Hyper-V Gen 2 VMs Gen 2 Hyper-V VMs boot via EFI and have a standard EFI framebuffer device. When the kdump kernel runs in such a VM, loading the efifb driver may hang because of accessing the framebuffer at the wrong memory address. The scenario occurs when the hyperv_fb driver in the original kernel moves the framebuffer to a different MMIO address because of conflicts with an already-running efifb or simplefb driver. The hyperv_fb driver then informs Hyper-V of the change, which is allowed by the Hyper-V FB VMBus device protocol. However, when the kexec command loads the kdump kernel into crash memory via the kexec_file_load() system call, the system call doesn't know the framebuffer has moved, and it sets up the kdump screen_info using the original framebuffer address. The transition to the kdump kernel does not go through the Hyper-V host, so Hyper-V does not reset the framebuffer address like it would do on a reboot. When efifb tries to run, it accesses a non-existent framebuffer address, which traps to the Hyper-V host. After many such accesses, the Hyper-V host thinks the guest is being malicious, and throttles the guest to the point that it runs very slowly or appears to have hung. When the kdump kernel is loaded into crash memory via the kexec_load() system call, the problem does not occur. In this case, the kexec command builds the screen_info table itself in user space from data returned by the FBIOGET_FSCREENINFO ioctl against /dev/fb0, which gives it the new framebuffer location. This problem was originally reported in 2020 [1], resulting in commit 3cb73bc3fa2a ("hyperv_fb: Update screen_info after removing old framebuffer"). This commit solved the problem by setting orig_video_isVGA to 0, so the kdump kernel was unaware of the EFI framebuffer. The efifb driver did not try to load, and no hang occurred. But in 2024, commit c25a19afb81c ("fbdev/hyperv_fb: Do not clear global screen_info") effectively reverted 3cb73bc3fa2a. Commit c25a19afb81c has no reference to 3cb73bc3fa2a, so perhaps it was done without knowing the implications that were reported with 3cb73bc3fa2a. In any case, as of commit c25a19afb81c, the original problem came back again. Interestingly, the hyperv_drm driver does not have this problem because it never moves the framebuffer. The difference is that the hyperv_drm driver removes any conflicting framebuffers *before* allocating an MMIO address, while the hyperv_fb drivers removes conflicting framebuffers *after* allocating an MMIO address. With the "after" ordering, hyperv_fb may encounter a conflict and move the framebuffer to a different MMIO address. But the conflict is essentially bogus because it is removed a few lines of code later. Rather than fix the problem with the approach from 2020 in commit 3cb73bc3fa2a, instead slightly reorder the steps in hyperv_fb so conflicting framebuffers are removed before allocating an MMIO address. Then the default framebuffer MMIO address should always be available, and there's never any confusion about which framebuffer address the kdump kernel should use -- it's always the original address provided by the Hyper-V host. This approach is already used by the hyperv_drm driver, and is consistent with the usage guidelines at the head of the module with the function aperture_remove_conflicting_devices(). This approach also solves a related minor problem when kexec_load() is used to load the kdump kernel. With current code, unbinding and rebinding the hyperv_fb driver could result in the framebuffer moving back to the default framebuffer address, because on the rebind there are no conflicts. If such a move is done after the kdump kernel is loaded with the new framebuffer address, at kdump time it could again have the wrong address. This problem and fix are described in terms of the kdump kernel, but it can also occur ---truncated---
Source: NVD (National Vulnerability Database)
CVSS Information
N/A
Source: NVD (National Vulnerability Database)
Vulnerability Type
N/A
Source: NVD (National Vulnerability Database)
Vulnerability Title
Linux kernel 安全漏洞
Source: CNNVD (China National Vulnerability Database)
Vulnerability Description
Linux kernel是美国Linux基金会的开源操作系统Linux所使用的内核。 Linux kernel存在安全漏洞,该漏洞源于fbdev hyperv_fb模块在kdump内核中挂起。
Source: CNNVD (China National Vulnerability Database)
CVSS Information
N/A
Source: CNNVD (China National Vulnerability Database)
Vulnerability Type
N/A
Source: CNNVD (China National Vulnerability Database)

Affected Products

VendorProductAffected VersionsCPESubscribe
LinuxLinux c25a19afb81cfd73dab494ba64f9a434cf1a4499 ~ cfffe46a994ac6d5de3b119917680ea1e9a96125 -
LinuxLinux 6.8 -

II. Public POCs for CVE-2025-21977

#POC DescriptionSource LinkShenlong Link
AI-Generated POCPremium

No public POC found.

Login to generate AI POC

III. Intelligence Information for CVE-2025-21977

登录查看更多情报信息。

Same Patch Batch · Linux · 2025-04-01 · 93 CVEs total

CVE-2025-219478.1 HIGHksmbd: fix type confusion via race condition when using ipc_msg_send_request
CVE-2025-21925llc: do not use skb_get() before dev_queue_xmit()
CVE-2025-21931hwpoison, memory_hotplug: lock folio before unmap hwpoisoned folio
CVE-2025-21934rapidio: fix an API misues when rio_add_net() fails
CVE-2025-21935rapidio: add check for rio_add_net() in rio_scan_alloc_net()
CVE-2025-21937Bluetooth: Add check for mgmt_alloc_skb() in mgmt_remote_name()
CVE-2025-21936Bluetooth: Add check for mgmt_alloc_skb() in mgmt_device_connected()
CVE-2025-21939drm/xe/hmm: Don't dereference struct page pointers without notifier lock
CVE-2025-21933arm: pgtable: fix NULL pointer dereference issue
CVE-2025-21927nvme-tcp: fix potential memory corruption in nvme_tcp_recv_pdu()
CVE-2025-21926net: gso: fix ownership in __udp_gso_segment
CVE-2025-21928HID: intel-ish-hid: Fix use-after-free issue in ishtp_hid_remove()
CVE-2025-21924net: hns3: make sure ptp clock is unregister and freed if hclge_ptp_get_cycle returns an e
CVE-2025-21922ppp: Fix KMSAN uninit-value warning with bpf
CVE-2025-21923HID: hid-steam: Fix use-after-free when detaching device
CVE-2025-21920vlan: enforce underlying device type
CVE-2025-21921net: ethtool: netlink: Allow NULL nlattrs when getting a phy_device
CVE-2025-21919sched/fair: Fix potential memory corruption in child_cfs_rq_on_list
CVE-2025-21918usb: typec: ucsi: Fix NULL pointer access
CVE-2025-21917usb: renesas_usbhs: Flush the notify_hotplug_work

Showing top 20 of 93 CVEs. View all on vendor page &rarr; →

IV. Related Vulnerabilities

V. Comments for CVE-2025-21977

No comments yet


Leave a comment