CVE-2026-80652
NoneCVSS
—
EPSS
0.2%
Published
Aug 28, 2026
CISA due date
—
Cloudanix analysis
A programming mistake in the Linux kernel's secure-processor driver can crash certain debug builds when a program asks for the size of some internal data instead of supplying that data.
- Exploitation
- Local Privilege
- Attacker needs
- Low Privilege
- Complexity
- Low
- Impact
- Denial Of Service
- Component
- OS kernel
- Class
- Improper Input Validation
- Remediation
- Upgrade
- Effort
- Medium
- Patch risk
- Low
What it actually does
Improper validation of a zero-length userspace certificate chain buffer during PDH export handling in the CCP/SEV driver causes kzalloc to return ZERO_SIZE_PTR; subsequent phys_addr lookup under CONFIG_DEBUG_VIRTUAL=y triggers BUG_ON in arch/x86/mm/physaddr.c.
Why it matters to the business
Kernel panic and denial of service on systems built with debug-virtual enabled when an unprivileged process issues a crafted SEV ioctl; production kernels without the debug option experience no crash but still perform an invalid allocation path.
How an attack unfolds
An attacker invokes the SEV PDH export ioctl with a zero-length cert-chain pointer; the driver treats the length query as a normal buffer and attempts address translation on the invalid pointer, hitting the BUG_ON only when the kernel was compiled with CONFIG_DEBUG_VIRTUAL=y.
How to fix it
Update to a kernel containing the referenced fix that checks for zero-length buffers before allocation and returns the required blob sizes instead of dereferencing an invalid pointer.
How to confirm the fix worked
Confirm the kernel source no longer contains the unconditional kzalloc path in sev_ioctl_do_pdh_export and that the zero-length case returns success with the queried lengths; test by repeating the zero-length ioctl and verifying no BUG or panic occurs even with DEBUG_VIRTUAL enabled.
Typical attack path
- Locate a system running a vulnerable kernel with CONFIG_DEBUG_VIRTUAL=y enabled
- Obtain local unprivileged access
- Call sev_ioctl with SEV_IOCTL_DO_PDH_EXPORT and a zero-length cert chain buffer
- Trigger the BUG_ON in __phys_addr
How to detect it
Review kernel logs for the exact BUG signature at arch/x86/mm/physaddr.c combined with the call trace containing sev_ioctl_do_pdh_export; correlate with audit records of SEV ioctls issued by non-root processes.
What your security team should do
- Identify all systems built with CONFIG_DEBUG_VIRTUAL=y and prioritize kernel upgrade
- Disable the debug option on production builds where feasible
- Monitor for unusual SEV ioctl activity from untrusted processes
The record
In the Linux kernel, the following vulnerability has been resolved: crypto: ccp - Treat zero-length cert chain as query for blob lengths When handling a PDH export, treat a zero-length userspace cert chain buffer as a request to query the length of the relevant blobs. Failure to account for the zero-length buffer trips a BUG_ON() when running with CONFIG_DEBUG_VIRTUAL=y due to trying to get the physical address of the ZERO_SIZE_PTR (returned by kzalloc() on the bogus allocation). kernel BUG at arch/x86/mm/physaddr.c:28 ! Oops: invalid opcode: 0000 [#1] SMP KASAN NOPTI CPU: 30 UID: 0 PID: 28580 Comm: syz.2.18 Kdump: loaded Tainted: G W 6.18.16-smp-DEV #1 NONE Tainted: [W]=WARN Hardware name: Google, Inc. Arcadia_IT_80/Arcadia_IT_80, BIOS 12.62.0-0 11/19/2025 RIP: 0010:__phys_addr+0x16a/0x180 arch/x86/mm/physaddr.c:28 RSP: 0018:ffffc9008329fc80 EFLAGS: 00010293 RAX: ffffffff8179110a RBX: 0000778000000010 RCX: ffff8884e6992600 RDX: 0000000000000000 RSI: 0000000080000010 RDI: 0000778000000010 RBP: ffffc9008329fdf0 R08: 0000000000000dc0 R09: 00000000ffffffff R10: dffffc0000000000 R11: fffffbfff126d297 R12: dffffc0000000000 R13: 1ffff92010653fc8 R14: 0000000080000010 R15: dffffc0000000000 FS: 0000555556bec9c0(0000) GS:ffff88aa4ce1c000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007fd3159e7000 CR3: 00000004fbc44000 CR4: 0000000000350ef0 Call Trace: <TASK> [<ffffffff853d3869>] sev_ioctl_do_pdh_export+0x559/0x7a0 drivers/crypto/ccp/sev-dev.c:2308 [<ffffffff853d1fdd>] sev_ioctl+0x2cd/0x480 drivers/crypto/ccp/sev-dev.c:2556 [<ffffffff82549ebc>] vfs_ioctl fs/ioctl.c:52 [inline] [<ffffffff82549ebc>] __do_sys_ioctl fs/ioctl.c:598 [inline] [<ffffffff82549ebc>] __se_sys_ioctl+0xfc/0x170 fs/ioctl.c:584 [<ffffffff8630115f>] do_syscall_x64 arch/x86/entry/syscall_64.c:64 [inline] [<ffffffff8630115f>] do_syscall_64+0x9f/0xf40 arch/x86/entry/syscall_64.c:98 [<ffffffff81000136>] entry_SYSCALL_64_after_hwframe+0x76/0x7e RIP: 0033:0x7fd3158eac39 </TASK> Thankfully, the bug is benign outside of CONFIG_DEBUG_VIRTUAL=y as getting the physical address is just arithmetic, and the PSP errors out before trying to write to the garbage address (which it must, otherwise querying the blob lengths would clobber memory at pfn=0).
Affected packages
| Ecosystem | Package | Introduced | Fixed |
|---|